Поскольку вы вызываете действие контроллера с использованием AJAX, очевидно, RedirectToAction
не будет работать там, потому что вызов AJAX предназначен для того, чтобы остаться на той же странице. Вы должны вернуть строку JSON для всех ответов и использовать switch...case
block или if-условие в клиентском скрипте для перенаправления в соответствующие действия, с помощью location.href
и @Url.Action()
помощника для генерации строки URL:
[HttpPost]
public ActionResult ValidateUser(string strUsername, string strPassword)
{
string strReturn = "";
string strDbError = string.Empty;
strUsername = strUsername.Trim();
strPassword = strPassword.Trim();
UserProviderClient ObjUMS = new UserProviderClient();
bool result = ObjUMS.AuthenticateUser(strUsername, strPassword, out strDbError);
Session["isUserAuthenticated"] = result;
if (result == true)
{
Session["isUserOutsideINDomain"] = true;
Session["OutsideINDomainUsername"] = strUsername;
//redirect to respective controller
UMS ObjUMSDATA = new UMS();
string strUserName = "";
string strCurrentGroupName = "";
int intCurrentGroupID = 0;
strUserName = System.Web.HttpContext.Current.User.Identity.Name.Split('\\')[1];
_UMSUserName = strUserName;
if (!string.IsNullOrEmpty(strUserName))
{
List<UMSGroupDetails> lstUMSGroupDetails = null;
List<UMSLocationDetails> lstUMSLocationDetails = null;
ObjUMSDATA.GetUMSGroups(strUserName, out strCurrentGroupName, out intCurrentGroupID, out lstUMSLocationDetails, out lstUMSGroupDetails);
if (strCurrentGroupName != "" && intCurrentGroupID != 0)
{
ViewBag.LoginUserName = strUserName.ToUpper();
ViewBag.CurrentGroupName = strCurrentGroupName;
ViewBag.CurrentGroupID = intCurrentGroupID;
ViewBag.GroupDetails = lstUMSGroupDetails;
ViewBag.LocationDetails = lstUMSLocationDetails;
TempData["Location"] = lstUMSLocationDetails;
TempData["strCurrentGroupName"] = strCurrentGroupName;
TempData.Keep();
// here you need to return string for success result
return Json(strCurrentGroupName);
}
else
{
return Json("Error");
}
}
}
else
{
strReturn = "Login UnSuccessful";
}
return Json(strReturn);
}
AJAX вызов
$.ajax({
url: AppConfig.PrefixURL + "Home/ValidateUser",
dataType: 'json',
type: 'post',
contentType: 'application/json',
data: JSON.stringify(Values),
processData: false,
success: function (result) {
switch (result) {
case 'NEIQC_SAP_ENGINEER':
location.href = '@Url.Action("Assign", "App")';
break;
case 'NEIQC_FIBER_ENGINEER':
location.href = '@Url.Action("Certify", "App")';
break;
case 'NEIQC_CMM':
location.href = '@Url.Action("Approver", "App")';
break;
case 'Error':
location.href = '@Url.Action("ErrorPage", "UnAuthorize")';
break;
case 'Login UnSuccessful':
// do something
break;
// other case options here
}
},
error: function (xhr, status, err) {
// error handling
}
});
Дополнительные примечания:
RouteConfig
обрабатывает маршруты от наиболее специфических до более общих маршрутов, поэтому маршрут Default
должен быть объявлен на последнем месте, а определение пользовательского маршрута должно отличаться от определения по умолчанию.
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Assign",
url: "App/{action}/{id}",
defaults: new { controller = "App", action = "Assign", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Login", id = UrlParameter.Optional }
);
}