2

このようなモデルがある場合:

public class Search
{
    public int Id { get; set; }
    public string UserDefinedName { get; set; }
    public SearchAge Age { get; set; }
    public virtual ICollection<SearchBachelors> Bachelors { get; set; }
}

そして、次のようなものを使用して、Age プロパティの部分ビューを動的にレンダリングします。

@Ajax.ActionLink("Age", "SearchAge", new AjaxOptions { UpdateTargetId = "search-stage", InsertionMode = InsertionMode.InsertAfter })

その部分的なビューは次のようになります。

@model HireWireWeb.Models.Campaign.Search.Search
<div>
    @Html.DropDownListFor(m => m.Age.MaximumAge, HireWireWeb.Models.Constants.SLIST_AGE_LIST)
    @Html.DropDownListFor(m => m.Age.MinimumAge, HireWireWeb.Models.Constants.SLIST_AGE_LIST)
</div>

(ここではモデルとして「SearchAge」を渡しているのではなく、レンダリングされた「検索」フォームの下でフォーム送信時に投稿された「SearchAge」値を取得する方法のみであるため、親の「検索」であることに注意してください) -この回答によると

私の質問は、ICollection であるため、「Bachelors」プロパティの部分ビューで同じことを行うにはどうすればよいですか?

4

1 に答える 1

1

MVC の標準モデル バインディング システムは、「バインド」されるタイプを作成できる必要があります。インターフェイスを作成できないため、この問題を修正する最も簡単な方法は、タイプを に変更することList<SearchBachelors>です。次に、次のような部分ビューを表示できます。

@model HireWireWeb.Models.Campaign.Search.Search
<div>
    @for(var i = 0;i<Model.Bachelors.Count;++i)
    {
        @Html.TextBoxFor(m => m.Bachelors[i].Name)
    }
</div>

List...レンダリングされた出力は、フォームを送信するときにリスト内の要素のインデックスを使用してプロパティにバインドされるような方法で名前が付けられます。

于 2012-11-06T10:43:41.563 に答える