複合型のリストのEditorFor()を作成しようとしています。具体的には、以下の「オプション」は、各オプション(文字列)が新しい行にある1つのマルチテキスト入力に表示されます。ただし、テキストボックスには1つのオプションしか表示できず、すべてのオプションを表示することはできません。
私のビューモデルとクラス:
public class ItemViewModel
{
public int itemId { get; set; }
[UIHint("Option")]
public List<Option> Options { get; set; }
}
public class Option
{
public string Text { get; set; }
}
私のエディターテンプレート:
EditorTemplates\Item.cshtml
@model ItemViewModel
@Html.EditorFor(model => model.Options)
EditorTemplates\Option.cshtml
//Not sure how to dispay the options here
<textarea rows="4" cols="50">
Display Options
</textarea>
EditorTemplatesを次のように更新した場合:
EditorTemplates\Item.cshtml
@model ItemViewModel
@Html.EditorFor(model => model.Options[0])
EditorTemplates\Option.cshtml
@Html.TextBoxFor(x => x.OptionText)
テキストボックスに最初のオプションが表示されます。しかし、私が達成しようとしているのは、マルチテキスト入力ですべてのオプションを表示することです。
何か案は?
もうすぐです。
このEditorTemplates\Option.cshtml
以下を追加します。
@model IEnumerable<Option>
@foreach(var option in Model)
{
@Html.TextBoxFor(m => option.Text)
}
次に、次のようにビューで呼び出します。
@Html.EditorFor(model => model.Options)
最初のgetでオプションを設定していない場合は、ItemViewModelクラスにこれを追加する必要があります。
public class ItemViewModel
{
public ItemViewModel()
{
Options = new List<Option>();
}
public int itemId { get; set; }
[UIHint("Option")]
public List<Option> Options { get; set; }
}
このコンストラクターはコレクションを初期化します。
public ItemViewModel()
{
Options = new List<Options>();
}
Shared/EditorTemplates/Option.cshtml
でビューを作成するだけです
@model Option
@Html.TextBoxFor(m => m.Text)
そして電話する
@Html.EditorFor(model => model.Options)
EditorForはコレクションを繰り返し処理します。
私は同じ問題にぶつかりました、そして私は異なる解決策を持っていますが、ハッチノイドと少し似ています。
したがって、最初の部分は同じです。次のようにOption.cshtmlを変更します。
@model IEnumerable<Option>
@foreach(var option in Model)
{
@Html.TextBoxFor(m => option.Text)
}
そして、Item.cshtmlでは、次のようにHtml.Partialを使用してOption.cshtmlを呼び出します。
@Html.Partial("Option", model:Model.Options)
また、私の場合、ItemViewModelクラスを変更する必要はありません。うまくいけば、これがこの問題の別の答えになることもあります。乾杯!