-1


私は、このような他の複雑なオブジェクトの配列である多くのプロパティを持つオブジェクトを持っています

class obj1
{
 public string prop1 {get; set;}
 public string prop2 {get; set;}
 public obj2[] array {get; set;}
}
class obj2
{
 SomeEnum Type{get; set;}
 string Content{get; set;}
}


obj2 の配列用のエディター テンプレートを作成しました。このようなobj2ArrayTemplate という名前を付けます。

@for (int i = 0; i < Model.Length; i++)
{
    @Html.EditorFor(model=>model[i],"obj2Template")
}


そして、obj2 のエディター テンプレートは、このようなobj2Template という名前を付けます

<div class="editor-label">
    @Html.DisplayFor(model=>model.Type,"SomeEnum",ViewData)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Content)
    @Html.ValidationMessageFor(model => model.Content)
</div>

プロパティTypeif は型SomeEnumでありenum、したがって Asp.Net MVC で直接レンダリングできない
ため、このためのテンプレートも作成しました
。これは次のようなものです。

<input type="text" value="@Model.ToString()" id="@ViewData.TemplateInfo.HtmlFieldPrefix" name="@ViewData.TemplateInfo.HtmlFieldPrefix"/>

ビューは正しくレンダリングされており、結合されたレンダリングされたビューの HTML は

<div class="editor-field">
    <input class="text-box single-line" id="array__0__Content" name="array.[0].Content" type="text" value="FBID" />
</div>
<div class="editor-label">
<input type="text" value="Blog" id="array.[1].Type" name="array.[1].Type"/>
</div>
<div class="editor-field">
    <input class="text-box single-line" id="array__1__Content" name="array.[1].Content" type="text" value="SOme random blog" />
</div>
<div class="editor-label">
<input type="text" value="Twitter" id="array.[2].Type" name="array.[2].Type"/>
</div>
<div class="editor-field">
    <input class="text-box single-line" id="array__2__Content" name="array.[2].Content" type="text" value="Twitter Profile" />
</div>

このhtml
クロムを含むフォームをポストバックすると、このポストされたデータが表示されます

prop1:val1
prop2:val2
array.[0].Type:Facebook
array.[0].Content:FBID
array.[1].Type:Blog
array.[1].Content:SOme random blog
array.[2].Type:Twitter
array.[2].Content:Twitter Profile

array of obj2しかし、型のモデルにある配列フィールドはまだobj1ですnull

私は何を間違っていますか?

4

1 に答える 1

1

それをクラックできます:)
サーバーから投稿されたリクエストを調べると、リクエストに.(ドット)余分なものが1つあることがわかりました

array.[0].Type:Facebook
array.[0].Content:FBID
array.[1].Type:Blog
array.[1].Content:SOme random blog
array.[2].Type:Twitter
array.[2].Content:Twitter Profile

これは再掲すべき

array[0].Type:Facebook
array[0].Content:FBID
array[1].Type:Blog
array[1].Content:SOme random blog
array[2].Type:Twitter
array[2].Content:Twitter 

そして、Asp.Net MVC フレームワークがその余分なドットを挿入する明確な理由は見つかりませんでした。MVC の方法ですべてを行っているとき
は、コードを変更して小さなハックを含めました。
obj2のEditorテンプレートにこんな感じで追加しました

@{
    ViewData.TemplateInfo.HtmlFieldPrefix = ViewData.TemplateInfo.HtmlFieldPrefix.Replace(".", "");
    }

だから今、すべてがうまくスムーズに進んでいます。

于 2013-01-12T19:42:47.167 に答える