モデル:フォームとリストとのMVC 3:デフォルトモデルバインダーとEditorFor
public class MyObject
{
public IList<Entry> Entries;
}
public class Entry
{
public string Name { get; set; }
}
IデフォルトEditorFor(モデル=> model.Entries)を使用する場合名/ ID値は次のとおり
<input type="text" value="" name="Entries[0].Name" id="Entries_0__Name">
代わりに私はこのようなEditorForテンプレートを作成する場合:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<CMS.Models.MyObject>>" %>
<div class="list">
<%
for (int i = 0; i < Model.Count; i++)
{ %>
<div class="object" id="<%: i %>">
<%: Html.EditorFor(model => Model[i]) %>
<%: Html.ValidationMessageFor(model => Model[i]) %>
</div>
<% } %>
</div>
放出される名前/ ID値は次のとおりです。
<input type="text" value="" name="Entries.[0].Name" id="Entries__0__Name">
したがって、名前にはプロパティ名と[0]の間にピリオドがあり、idにはインデックス番号の左に余分なアンダースコアが付きます。これはデフォルトのモデルバインダーでは機能しません。デフォルトのモデルバインダーで動作する方法はありますか?
なぜこれをやりたいですか?検証メッセージが含まれているかどうか、IDタグが設定されたdivタグが必要なのですか? –
リストの最後にジェネリックjQueryベースの「追加」オプションを追加して、別の要素を追加できるようにしています。そのHTMLでリストを出力することで、 "add"ジェネリックをもっと簡単に作成できます。 1つのセクションがN個の参照を必要とするフォームを考えてください(各参照は複数のプロパティを持っています)、別の部分は他のものに関するN個の詳細を必要とします(各部分は複数のプロパティを持っています)... – Cymen