ここで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 を使用して、状況によっては応答として送信されるモデルを変更し、他の状況ではモデルを受け入れてキャッシュで更新します。この場合、バインドする必要があります。