我从Login控制器调用一个Action来验证用户,一旦用户通过身份验证,我想调用 Cashier 或 Supervisor 操作,具体取决于用户的角色,并显示相应的视图。
我可以暂时AuthenticateUserByCard
,但RedirectToAction
似乎无法正常工作。
我不确定我尝试做的是偏离MVC架构,如果是这样,请建议正确的方法来执行此操作
登录控制器:
public class LoginController : Controller
{
public ViewResult Index()
{
return View();
}
[HttpPost]
public ActionResult AuthenticateUserByCard(string token)
{
//Authenticate user and redirect to a specific view based on the user role
Role role = GetRoleByToken(token);
if(role.UserType == UserType.Supervisor)
return RedirectToAction("Supervisor", "Login", new { id = token });
else
return RedirectToAction("Cashier", "Login", new { id = token });
return null;
}
public ActionResult Supervisor(string id)
{
//Do some processing and display the Supervisor View
return View();
}
public ActionResult Cashier(string id)
{
//Do some processing and display the Cashier View
return View();
}
}
Java脚本:
$.get("/Login/AuthenticateUserByCard",{token:token});
答案 0 :(得分:0)
jQuery post
和get
忽略从服务器返回的301个浏览器重定向。您通常需要自己处理它们。这可能会变得混乱:How to manage a redirect request after a jQuery Ajax call
在这种情况下你真正需要的是返回方法的选择,但让它们返回显式视图(不是隐式的)。除非您指定视图,否则默认情况下将始终基于IIS调用的方法返回视图,即“AuthenticateUserByCard”。
public class LoginController : Controller
{
public ViewResult Index()
{
return View();
}
[HttpPost]
public ActionResult AuthenticateUserByCard(string token)
{
//Authenticate user and redirect to a specific view based on the user role
Role role = GetRoleByToken(token);
if(role.UserType == UserType.Supervisor)
return Supervisor(token);
else
return Cashier(token);
return null;
}
public ActionResult Supervisor(string id)
{
//Do some processing and display the Supervisor View
return View("Supervisor");
}
public ActionResult Cashier(string id)
{
//Do some processing and display the Cashier View
return View("Cashier");
}
但这不会改变URL。如果您需要,也可以尝试我链接的其他答案。你基本上处理jQuery中的重定向并转到新页面。
或者,要更改URL,请将所需的URL放入返回视图的隐藏字段中,并提取该值以更新浏览器URL(只是想一想):)