在实施this useful response并将Login
视图移至Shared
视图文件夹后,当我从另一个控制器调用它时,它不会被初始化。
我的主叫代码:
[HttpGet]
public IActionResult AddressCorrectionList()
{
if (ValidateSecurityToken()) // ensures the app server thinks we're still logged in
{
[deleted for clarity]
return View(model);
}
else
{
return View("Login", new LoginViewModel { ReturnUrl = "/Report/AddressCorrectionList" });
}
}
调用AccountController中的操作:
[ActionName("Login"), HttpGet]
[AllowAnonymous]
public IActionResult LoginGet(LoginViewModel model)
{
ViewData["ReturnUrl"] = model.ReturnUrl; // I set a breakpoint here.
if (model.ReturnUrl != null)
{
model.InfoMessage = "Please login to access " + ResourceNameFor(model.ReturnUrl);
}
ModelState.Clear();
return View(model);
}
如果我直接点击登录页面的链接,它可以正常工作。我在LoginGet
中的断点被称为。
如果我尝试按照指向需要登录的页面的链接但我没有登录,则可以正常工作。我被正确地重定向到了登录页面。我在LoginGet
中的断点被称为。
当我从另一个控制器(例如来自两个代码片段中的第一个)调用View
时,会出现问题。将显示登录页面,但未调用LoginGet
的断点,并且未设置ReturnUrl
。
ValidateSecurityToken
存在是因为虽然应用程序可能会认为用户已登录,但我调用API的单独应用服务器可能会因用自己的超时规则而将用户注销。
如何修复AddressCorrectionList
的来电,以便正确初始化我的观点?
答案 0 :(得分:2)
调用return View("viewName", model)
时,使用给定模型直接呈现cshtml文件。当您调用方法返回视图时,操作 LoginGet
永远不会被点击。
您正在寻找的是执行RedirectToAction("LoginGet")
方法或其任何重载方法。