从另一个控制器调用控制器并返回视图
本文关键字:控制器 返回 视图 调用 另一个 | 更新日期: 2023-09-27 17:56:26
我从登录控制器调用操作来验证用户,一旦用户通过身份验证,我想调用出纳或主管操作,具体取决于用户的角色,并显示相应的视图。
我可以中断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});
jQuery post
并且get
忽略从服务器返回的 301 浏览器重定向。您通常需要自己处理它们。这可能会变得混乱:如何在jQuery Ajax调用后管理重定向请求
在这种情况下,您真正需要的是返回方法的选择,但使它们返回显式视图(非隐式)。默认设置始终是基于 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(只是一个想法):)