web-dev-qa-db-ja.com

複合型のリスト(MVC)のEditorFor()

複合型のリストの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)

テキストボックスに最初のオプションが表示されます。しかし、私が達成しようとしているのは、マルチテキスト入力ですべてのオプションを表示することです。

何か案は?

15
piris

もうすぐです。

この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>();
}
15
hutchonoid

Shared/EditorTemplates/Option.cshtmlでビューを作成するだけです

@model Option

@Html.TextBoxFor(m => m.Text)

そして電話する

@Html.EditorFor(model => model.Options)

EditorForはコレクションを繰り返し処理します。

17
Antonio Correia

私は同じ問題にぶつかりました、そして私は異なる解決策を持っていますが、ハッチノイドと少し似ています。

したがって、最初の部分は同じです。次のように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クラスを変更する必要はありません。うまくいけば、これがこの問題の別の答えになることもあります。乾杯!

0
Sambalado