1

私は次のモデルを持っています

 public class FilterSetting
{
    public FilterType Type { get; set; }
    public ShowOption Option { get; set; }
    public bool IsMultiple { get; set; }
    public List<int> SelectedValues { get; set; }
    public List<SelectListItem> Values { get; set; }
    public int RowCount { get; set; }
}
public enum ShowOption
{
    Common,
    Also,
    All
}

ShowOption 列挙型のラジオ ボタン グループを作成したいのですが、FilterSetting のリストを作成する別のモデルがあり、それぞれにグループが必要な約 7 個の FilterSettings が表示されるため、エディター テンプレートを使用してそのグループを表示したいと考えています。 ShowOption プロパティの 3 つのラジオ ボタン。

問題は、かみそりがエディター テンプレートからラジオ ボタンをレンダリングしているときに、すべてのラジオ ボタンに同じ名前 (name="filter.Option") を使用し、値を設定する方法がわからないことです。

これは私の編集者のテンプレートです

@model Models.FilterSetting


@Html.RadioButtonFor(f => f.Option, "Common", new { id = ""+ Model.Type })
@Html.Label(""+Model.Type, "Show only common assets")
<br />
@Html.RadioButtonFor(f => f.Option, "Also", new { id = "" + Model.Type })
@Html.Label(""+Model.Type, "Also show assets matching the values selected below")
<br />
@Html.RadioButtonFor(f => f.Option, "All", new { id = "" + Model.Type })
@Html.Label(""+Model.Type, "Show all assets")
<br />


@if (Model.IsMultiple)
{
    @Html.ListBoxFor(f => f.SelectedValues, Model.Values)
}
else
{ 
    @Html.DropDownListFor(f => f.SelectedValues, Model.Values, new { size = "4" })
}

htmlAttributes オブジェクトに名前を渡そうとしましたが、うまくいきません。

編集: どうやら問題は、私がエディターを呼び出す方法です。このように呼んでいます

@foreach (var filter in Model.FilterSettings)
{
      ....
      @Html.EditorFor(f => filter)
}

そして、私がこのようにそれを呼び出すとき

@Html.EditorFor(f => f.filterSettings)

ラジオボタンは正常に機能します。for each を実行するとどうなりますか?

助けてくれてありがとう!

4

2 に答える 2

1

コレクションの を呼び出すと、Editor/EditorForRazor は生成された名前と ID を追跡するため、ex のように生成された名前を取得します。Addresses[0].Line1Addresses[1].Line1...

しかし、コレクションを自分で反復し、各モデルのカミソリのエディターを呼び出すと、名前と ID の追跡が行われず (どのようにすべきか? それはより複雑ではありませんか?)、それは新しいコントロールと見なされます。ページにレンダリングされます。

于 2012-06-13T02:17:30.023 に答える