我有一个自定义的 ModelBinder,我想采取行动。因为我想使用反射来获取 Action 的属性,所以 Action 名称是不够的。
我的行动方法:
[MyAttribute]
public ActionResult Index([ModelBinder(typeof(MyModelBinder))] MyModel model)
{
}
这里是一个典型的 ModelBinder
public class MyModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
// here i would like to get the action method and his "MyAttribute"
}
}
任何建议,其他解决方案?
提前谢谢了
最佳答案
不,您不能 100% 确定地从模型活页夹中获取当前操作。模型绑定(bind)器不耦合到 Action ,而是绑定(bind)到模型。例如,您可以调用
TryUpdateMode(model)
在选择操作之前的过滤器中。另请注意,操作方法甚至可能不是可以反射(reflect)的 CLR 方法(参见 http://haacked.com/archive/2009/02/17/aspnetmvc-ironruby-with-filters.aspx)。
我认为真正的问题是,您到底想完成什么,这是正确的方法吗?如果您希望将操作中的信息传递给模型绑定(bind)器(请注意如果信息不存在,模型绑定(bind)器应该优雅降级的建议),您应该使用操作过滤器将信息放入 HttpContext.Items (或类似的地方),然后让你的活页夹取回它。
Action 过滤器的 OnActionExecuting 方法接收具有 ActionDescriptor 的 ActionExecutingContext。你可以调用 GetCustomAttributes 。
关于asp.net-mvc - Asp.NET MVC ModelBinder,获取 Action 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6198155/