努力弄清楚为什么我在这里从 BindModel 返回 null 。我有一个正在扩展的属性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 来修改在某些情况下作为响应发送的模型,而在其他情况下,它接受要在缓存中更新的模型。在这种情况下,我需要绑定它。