如何在MVC3中从一个视图重定向到另一个视图?

Teo*_*ris 1 asp.net-mvc-3

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

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

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

     ???
}
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 6

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

在呈现此视图的控制器操作内重定向.例如,您可以使用[Authorize]属性来装饰它.这样,如果用户未获得授权,他将被重定向到您在web.config中指定的loginUrl:

[Authorize]
public ActionResult SomeAction()
{
    return View();
}
Run Code Online (Sandbox Code Playgroud)

如果您想重定向到某个特定视图,您可以简单地编写一个自定义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);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后用它装饰你的动作:

[MyAuthorize]
public ActionResult SomeAction()
{
    return View();
}
Run Code Online (Sandbox Code Playgroud)

现在在相应的视图中,您不需要执行任何测试.保证如果您在渲染此视图时已对用户进行了身份验证,您可以直接欢迎他:

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

Welcome <strong>@User.Identity.Name</strong>
Run Code Online (Sandbox Code Playgroud)