如何从Razor功能中的新页面重定向?

时间:2017-01-24 20:49:17

标签: asp.net asp.net-mvc asp.net-mvc-4 redirect razor

我正在修改一个asp.net MVC应用程序,其中Razor用于.cshtml。在标题中是对函数“RendoWelcomeMessage()”的调用。这会调用同一页面上的脚本中的函数。通常,它显示用户的名称。如果会话超时,则会显示一条消息,说明要登录。我需要更改它,以便在会话超时时重定向到登录页面。下面的代码不起作用。它似乎跳过或忽略重定向,只返回消息。如何让重定向工作?

以下是对HTML标题中函数的调用:

<header>
    <div class="content-wrapper">
        <div class="float-right" style="font-size: 10pt;">
            <b>@RenderWelcomeMessage()</b>@Html.Raw(@RenderUser())
        </div>
    </div>
</header>

这是功能:

@functions
{
public string RenderWelcomeMessage()
{
    string welcomeMessage = "Please Log In";
    try
    {
        welcomeMessage = Session["CurrLoggedUser"] == null ? "Please Log In" : "Welcome: ";
    }
    catch (Exception ex)
    {
        Response.Redirect("~/Account/Login");
        //return "Please Log In";
    }
    return welcomeMessage;
}
}

它确实击中了捕获的部分,但它表现得好像我从未添加过response.redirect。

1 个答案:

答案 0 :(得分:1)

可以通过将渲染移动到具有Authorize属性的操作来完成解决方案。

RenderWelcomeMessage移至行动

<header>
    <div class="content-wrapper">
        <div class="float-right" style="font-size: 10pt;">
            <b>@Html.Action("WelcomeMessage")</b>
        </div>
    </div>
</header>

制作动作

 [Authorize]
 public ActionResult WelcomeMessage()
 {
     return Content("Welcome: " + Session["CurrLoggedUser"]);
 }

当会话过期时,用户将被自动重定向到登录页面(当然,如果是configured in application)。