C# 如何从自定义属性返回带有模型的PartialView

C# 如何从自定义属性返回带有模型的PartialView,c#,asp.net-mvc-5,asp.net-mvc-partialview,authorize-attribute,C#,Asp.net Mvc 5,Asp.net Mvc Partialview,Authorize Attribute,我所做的核心工作是,如果您访问www.mysite.com/admin/index,我希望呈现一个显示“未经授权”的局部视图,该视图附带一个模型。我真的不希望网站显示www.mysite.com/error/unauthorized/因为当有人打电话告诉我我在“/error/unauthorized”页面上出错时,这不是很有用,而我真的希望他们说“我在/admin/index页面上遇到了未经授权的错误” 我的CustomAuthorizeAttribute继承自AuthorizeAttribut

我所做的核心工作是,如果您访问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,但我真的希望有某种方法可以将模型传递到部分

,因为它是get only并返回
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;