努力弄清楚爲什麼我在這裏從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