努力弄清楚为什么我在这里从BindModel返回null。我有一个扩展ActionFilterAttribute
属性...在ActionFilterAttribute中绑定
public class MyCachedAttribute : ActionFilterAttribute
{
private IModelBinder binder = new DefaultModelBinder();
private Type model;
public MyCachedAttribute(Type model)
{
this.model = model;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
ModelBindingContext bindingContext = new ModelBindingContext()
{
ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, model),
ModelName = model.Name,
ModelState = filterContext.Controller.ViewData.ModelState,
ValueProvider = filterContext.Controller.ValueProvider
};
object data = binder.BindModel(filterContext.Controller.ControllerContext, bindingContext);
的data
在这一点上是null
。
编辑:我已经回到这个,并认识到ModelState
是空的(因此导致null
),因为该方法没有正常传入的模型(因此,为什么我在这种情况下绑定,捡起它)。
[MyCached(typeof(FooViewModel))]
public ActionResult Foo()
{
return PartialView(new FooViewModel());
}
我该如何为我有的类型生成ModelState
,并将它传递给活页夹?我试图避免添加模型作为输入参数,因为它会导致问题,但它看起来像我可能不得不排序这些问题,而如果这仍然是一个问题。
谢谢。
EDIT2:我使用的是ActionFilterAttribute这里修改发送,在某些情况下,响应模型,而在其他情况下,它接受一个模型,在高速缓存中进行更新。在这种情况下,我需要绑定它。
什么你想达到多少?它看起来像你想创建一个自定义模型绑定器,应该从'DefaultModelBinder'派生而不是创建'ActionFilterAttribute'。 – 2013-02-27 17:18:04
当使用此属性并发送POST命令时,我稍后使用模型将其存储在缓存中。我已经删除了代码,只是绑定过程。 – Tim 2013-02-27 17:50:18
如果你想做缓存,为什么不使用'OutputCacheAttribute'? – 2013-02-27 17:57:53