gpt4 book ai didi

c# - 如何访问自定义 ActionFilterAttribute 中的模型和元数据?

转载 作者:太空宇宙 更新时间:2023-11-03 17:57:24 25 4
gpt4 key购买 nike

public class CheckMetadataAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
// get model
// get metadata for each model property
// set viewdata if metadata X exists
}
}

老问题是:如何在自定义 ModelMetadataProvider 中访问 ViewData?那是不行的。

最佳答案

您不能/不应该访问模型元数据提供程序中的 ViewData 或任何 HttpContext 相关信息。

更新:

在更新问题之后,事情开始变得有点意义,所以让我们更新答案:

public class CheckMetadataAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{

// get model?
var result = filterContext.Result as ViewResultBase;
if (result != null)
{
var model = result.Model;
if (model != null)
{
// get metadata for model (you have a single model, no idea what you meant by "for each model" in your question)
var metadata = ModelMetadataProviders.Current.GetMetadataForType(null, model.GetType());
if (metadata.DisplayName == "foo bar")
{
// set viewdata if metadata X exists
filterContext.Controller.ViewData["foo"] = "bar";
}
}
}
}
}

话虽这么说,显然,使用 ViewData在 ASP.NET MVC 应用程序中是我绝对不推荐的。 ViewData是弱类型的。无论你想要达到什么目的(如果你已经解释了你的目标,那就太好了),不要使用 ViewData,使用 View 模型和强类型 View 。

我个人对 ASP.NET MVC 应用程序中的 ViewBag/ViewData 之类的东西过敏。当我进行代码审查并看到人们使用它们时,我知道他们做错了什么。

关于c# - 如何访问自定义 ActionFilterAttribute 中的模型和元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7638972/

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