インターフェイスをサポートするモデル バインダー プロバイダーを作成する方法に関するこのブログ投稿を見ました。
しかし、実際のModel Binderをどう扱えばいいのか途方に暮れています。
を継承できることはわかってDefaultModelBinder
いますが、カスタム モデル バインダーで関連する具象クラスを作成するにはどうすればよいですか? CreateModel 関数でこれを行いますか? もしそうなら、どうやってそれをしますか?
私のインターフェイスといくつかのクラスの構造例:
public interface IAnswerControlViewModel : IQuestionAnswerControl
{
...
}
public class AnswerControl<T> : IAnswerControlViewModel
{
..
}
public class AnswerCheckBox : AnswerControl<bool>
{
}
public class AnswerMultiLineText : AnswerControl<string>
{
[DataType(DataType.MultilineText)]
public override string Value { get; set; }
}
public class AnswerCheckBoxListModal: AnswerControl<AnswerMultiSelectListValueType>
{
public string ModalName { get; set; }
}
これは、ブログ投稿の例を使用して、Global.asax で取得したモデル バインディングです。
ModelBinders.Binders.Add(typeof(IAnswerControlViewModel), new AnswerControlModelBinder());
var answerControlBinderProvider = new InheritanceAwareModelBinderProvider
{
{ typeof (IAnswerControlViewModel), new AnswerControlModelBinder() }
};
ModelBinderProviders.BinderProviders.Add(answerControlBinderProvider);
目標は、MVC がアクションへの投稿中にこれにバインドする方法をモデル化することです。
public IList<IAnswerControlViewModel> AnswerControls { get; set; }