簡體   English   中英

如何從自定義AuthorizeAttribute返回帶有模型的PartialView

[英]How to return PartialView with model from custom AuthorizeAttribute

在我正在做的事情的核心,我想要的是,如果你去www.mysite.com/admin/index,我想呈現一個部分視圖,顯示“未授權”,其中附有一個模型。 我真的不想讓網站顯示www.mysite.com/error/unauthorized/,因為當有人打電話告訴我“/ error / unauthorized”頁面出錯時我不是很有用,當我真的想要它們時說“我在/ admin / index頁面上有未經授權的錯誤”。

我有我的CustomAuthorizeAttribute繼承自AuthorizeAttribute工作正常,而不是重定向。

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
    // returns boolean if it is good or not
}

然后我有我的HandleUnauthorizedRequest,這是我需要通過模型傳遞部分的地方:

if (context.RequestContext.HttpContext.User.Identity.IsAuthenticated)
{
    base.HandleUnauthorizedRequest(context);

}
else
{
    var viewResult = new PartialViewResult();
    viewResult.ViewName = "~/Views/Shared/Unauthorized.cshtml";
    viewResult.Model = new ViewModels.Unauthorized() { MyData = "My Data" }; // obviously can't do this as it is read-only

    context.Result = viewResult;
}

我知道我可以刪除viewResult.Model並只使用ViewBag,但我真的希望有一些方法可以將模型傳遞給Partial

由於PartialViewResult.Model僅為get並返回ViewData.Model ,您所要做的就是創建和設置ViewData屬性:

var model = new ViewModels.Unauthorized() { MyData = "My Data" };
var viewResult = new PartialViewResult
{
    ViewName = "~/Views/Shared/Unauthorized.cshtml",
    ViewData = new ViewDataDictionary(model)
};
context.Result = viewResult;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM