3

モデル:

public class MyObject
{
    public IList<Entry> Entries;
}

public class Entry
{
    public string Name { get; set; }
}

デフォルトのEditorFor(model => 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にはインデックス番号の左側に余分なアンダースコアがあります。これは、デフォルトのモデルバインダーでは機能しません。デフォルトのモデルバインダーで機能するこれを行う方法はありますか?

4

1 に答える 1

3

モデルバインダーで問題を引き起こしているように見えるリストを明示的に反復する必要なく、テンプレートを使用してこれのほとんどを実行できると思います。

これらの共有エディター テンプレートを作成してみてください。

MyObject エディタ テンプレート

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CMS.Models.MyObject>" %>

<div class="list">
    <%: Html.EditorFor(m => m.Entries) %>
</div>

エントリ エディタ テンプレート

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CMS.Models.Entry>" %>

<div class="object" id="<%: ??? %>">
    <%: Html.EditorFor(m => m.Name) %>
    <%: Html.ValidationMessageFor(m => m.Name) %>
</div>

私がまだ理解していない唯一のことは、divのid属性で正しい値を取得する方法であるため、疑問符です。最後の警告は、私は家にいるので、実際にこれを試していないということです.

于 2011-02-11T01:34:17.187 に答える