大家好,我想问一下如何从一个视图重定向到另一个视图。这是我的看法
@model IEnumerable<test.Models.contents>
@using test
@if(Request.IsAuthenticated) {
<text>Welcome<strong>@User.Identity.Name</strong>
</text>
}
else
{
???
}
大家好,我想问一下如何从一个视图重定向到另一个视图。这是我的看法
@model IEnumerable<test.Models.contents>
@using test
@if(Request.IsAuthenticated) {
<text>Welcome<strong>@User.Identity.Name</strong>
</text>
}
else
{
???
}
不要在视图内进行任何重定向。那不是它的责任。视图的职责是以视图模型的形式显示从控制器操作传递给它的数据。
在呈现此视图的控制器操作中执行此重定向。例如,您可以使用[Authorize]
属性来装饰它。这样,如果用户未获得授权,他将被重定向到您在 web.config 中指定的 loginUrl:
[Authorize]
public ActionResult SomeAction()
{
return View();
}
如果您想重定向到某个特定视图,您可以简单地编写一个自定义 Authorize 属性并覆盖该HandleUnauthorizedRequest
方法以指定您希望重定向到的控制器和操作,以防用户未通过身份验证:
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
var values = new RouteValueDictionary(new
{
controller = "SomeController",
action = "NotAuthorized"
});
filterContext.Result = new RedirectToRouteResult(values);
}
}
然后用它装饰你的动作:
[MyAuthorize]
public ActionResult SomeAction()
{
return View();
}
现在在相应的视图中,您不需要执行任何测试。可以保证,如果您渲染此视图,则用户已通过身份验证,您可以直接欢迎他:
@model IEnumerable<test.Models.contents>
@using test
Welcome <strong>@User.Identity.Name</strong>