我正在修改一个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。
答案 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)。