gpt4 book ai didi

c# - 从 OnActionExecuting 显式设置时 ViewModel 为 null

转载 作者:太空狗 更新时间:2023-10-29 23:34:07 25 4
gpt4 key购买 nike

我研究了一些关于 SO 的问题,但似乎找不到答案。谁知道,也许我正在打破最佳实践。在阅读了一个关于使用布局注入(inject)器属性能够通过简单地指定属性来设置布局的优秀答案后,我想我也可以使用这种类来属性化需要用户进行身份验证的 Controller 。

因此,我不必到处检查身份验证,而是编写了以下内容:

    // class AdminAttribute
public class AdminAttribute : LayoutInjectorAttribute
{
// ctor
public AdminAttribute()
: base("_LayoutAdmin")
{
} // eo ctor


public override void OnActionExecuting(ActionExecutingContext filterContext)
{
WebUser user = WebApplication.CurrentUser;
if (!user.IsAuthenticated)
{
filterContext.Result = new ViewResult() { ViewName = "Unauthorised" };
filterContext.Controller.ViewData.Model = new ViewModel(WebApplication.CurrentUser.Translate("msgunauthorisedtitle"));
filterContext.Result.ExecuteResult(filterContext.Controller.ControllerContext);
return;
}
base.OnActionExecuting(filterContext);
} // eo OnActionExecuting

} // eo class AdminAttribute

除了处理 View 时模型为 null 之外,一切正常。有谁知道为什么会这样?

查看页面(Unauthorised.cshtml)

@model Py2.Web.ViewModel
<h2>@Model.Title</h2>

提前致谢!

最佳答案

像这样尝试:

if (!user.IsAuthenticated)
{
var result = new ViewResult { ViewName = "Unauthorised" };
var model = new ViewModel(
WebApplication.CurrentUser.Translate("msgunauthorisedtitle")
);
result.ViewData.Model = model;
filterContext.Result = result;
return;
}

请注意,无需显式调用 ExecuteResult,这是 ASP.NET MVC 框架的工作,只需通过向其传递模型(result.ViewData.Model)返回 ViewResult = 模型)。另请注意此 View 模型传递给 View 结果的方式,而不是像您在代码中那样传递给 filterContext.Controller.ViewData.Model

关于c# - 从 OnActionExecuting 显式设置时 ViewModel 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6726966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com