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