如何正确初始化共享视图?

时间:2017-01-03 19:53:48

标签: c# asp.net authentication asp.net-core

在实施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的来电,以便正确初始化我的观点?

1 个答案:

答案 0 :(得分:2)

调用return View("viewName", model)时,使用给定模型直接呈现cshtml文件。当您调用方法返回视图时,操作 LoginGet永远不会被点击。

您正在寻找的是执行RedirectToAction("LoginGet")方法或其任何重载方法。