Jag*_*uir 1 c# model-view-controller viewdata metadata asp.net-mvc-3
public class CheckMetadataAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
// get model
// get metadata for each model property
// set viewdata if metadata X exists
}
}
Run Code Online (Sandbox Code Playgroud)
老问题是:如何在自定义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";
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这ViewData就是说,显然,在ASP.NET MVC应用程序中使用是我绝对推荐的.ViewData是弱类型的.无论你想要实现什么(如果你已经解释了你的目标,本来会很好),不要使用ViewData,使用视图模型和强类型视图.
就个人而言,我对ASP.NET MVC应用程序中的ViewBag/ViewData过敏.当我进行代码审查并看到人们使用它们时,我知道他们做错了什么.
| 归档时间: |
|
| 查看次数: |
3249 次 |
| 最近记录: |