私は初心者のASP.NETMVC3 Web開発者であり、次の問題があります。
同様のロジックを持ついくつかのビューモデルがあり、それらをレンダリングするための1つの共通のEditorTemplateを用意することにしましたHtml.EditorFor
。
テンプレートの名前は「 」で、インターフェイスクラスExistOrCreateNewInput.cshtml
で強く型付けされています。IExistOrCreateNewInput
public interface IExistOrCreateNewInput
{
int? existEntId { get; set; }
IUnapprovedNewEntityCreateInput createInput { get; set; }
}
テンプレートのコンテンツは次のようなものです。
@model IExistOrCreateNewInput
<h2>Add or choose</h2>
@* here put some common js code *@
Html.EditorFor(o => o.existEntId)
Html.EditorFor(o => o.createInput)
このインターフェイスを実装するある種のモデルがあるとします。次に例を示します。
public class FirstModelInput : IExistOrCreateNewInput
{
[Display(Name="First")]
[UIHint("Lookup")]
public int? existEntId {get; set;}
[UIHint("PaperCreateInput")]
public PaperCreateInput paperCreateInput {get; set;}
public IUnapprovedNewEntityCreateInput createInput
{
get
{
return paperCreateInput;
}
set { }
}
}
public class SecondModelInput : IExistOrCreateNewInput
{
[Display(Name="Second")]
[UIHint("Lookup")]
public int? existEntId {get; set;}
[UIHint("ThesisCreateInput")]
public ThesisCreateInput thesisCreateInput {get; set;}
public IUnapprovedNewEntityCreateInput createInput
{
get
{
return thesisCreateInput;
}
set { }
}
}
public class ThirdModelInput : IExistOrCreateNewInput
{
...
}
場所PaperCreateInput
とThesisCreateInput
クラスはIUnapprovedNewEntityCreateInput
インターフェースを実装します。だから、ビューモデルが欲しい
public class SomeGlobalViewModel
{
[Required]
string name {get; set;}
[UIHint("ExistOrCreateNewInput")]
FirstModelInput firstModel {get; set;}
}
メソッドを使用して属性「firstModel」を正しくレンダリングしますHtml.EditorFor(o => o.firstModel)
。EditorForメソッドがメタデータを処理していることがわかったので、おそらく私の質問は「属性のメタデータをベースインターフェイス属性に渡すにはどうすればよいか」のようになるはずです。私が間違っているなら、私を訂正してください。
とにかく、私はそれらのヘルパーメソッドが必要です
Html.EditorFor(o => o.existEntId)
Html.EditorFor(o => o.createInput)
クラスの実装でモデルを宣言したときにモデルの属性をレンダリングするためのエディターテンプレート(インターフェイスで強く型付けされている):
[UIHint("Lookup")]
public int? existEntId {get; set;}
[UIHint("PaperCreateInput")]
public PaperCreateInput createInput {get; set;}
前もって感謝します。英語が下手でごめんなさい。