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 に答える