1

大家好,我想问一下如何从一个视图重定向到另一个视图。这是我的看法

@model IEnumerable<test.Models.contents>
@using test   

@if(Request.IsAuthenticated) {
    <text>Welcome<strong>@User.Identity.Name</strong>
    </text>
}
else
{

     ???
}
4

1 回答 1

6

不要在视图内进行任何重定向。那不是它的责任。视图的职责是以视图模型的形式显示从控制器操作传递给它的数据。

在呈现此视图的控制器操作中执行此重定向。例如,您可以使用[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>
于 2012-09-20T11:03:47.690 回答