5

EditFor 関数を使用してビューでレンダリングしているモデルにオブジェクトのコレクションがあり、各オブジェクトを実際にレンダリングするための EditorTemplate があります。

@Html.EditorFor(model => model.MyObjects)

これはしばらくうまく機能しており、html を確認すると、テキスト ボックスにはモデル プロパティのプレフィックスが付けられ、その後に元のコレクションのインデックスが続きます。

<input class="text-box single-line" id="MyObjects_2__SomeProperty" 
name="MyObjects[2].SomeProperty" type="Text" value="" />

ただし、最近、コレクションのモデル メタデータで ShowForEdit および ShowForDisplay プロパティを使用し始めました。ShowForEdit が true でない場合は、エディター テンプレートの最初の行でスキップします。

@if (!ViewData.ModelMetadata.ShowForEdit)
{
    return;
}

しかし、これらはすべて html でインデックス化されているため、このコレクションをポストバック経由でビューモデルに保存しようとすると、インデックス番号に依存するために失敗します。欠落しているインデックスの後のコレクション内のすべてのアイテムは、値を確認すると、ビュー モデルから欠落しています。

この場合、編集ビューに表示したくないのでスキップするのは、実際にはコレクション内の最初の項目ですが、このため、html の最初のインデックスをポストバックすると 1 (0 ではなく) になります。通常のように)、変更を保存しようとすると、これが問題になります。これは、javascript を使用して DOM を変更する場合にも問題になります。

HTML で表現されたコレクションに 1 つ以上のインデックスが存在しない場合に、デフォルトのモデル バインダーがポストバックされたデータを読み取る機能で問題が発生した人はいますか?

この問題を処理するモデル バインダーはありますか?

4

2 に答える 2

0

ゼロベースの連続インデックスを提供する必要なく、リストにモデルバインドできる非常に優れたブログ投稿がいくつかあります。http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/
http://zahidadeel.blogspot.com/2011をご覧ください。 /05/master-detail-form-in-aspnet-mvc-3-ii.html
さらに、MVVM パターンとノックアウト js に興味がある場合は、スティーブ サンダー
ソンによるこの素晴らしい作品を確認できます。 mvc style」をGoogleで検索すると、多数の便利なリンクが表示されます

于 2011-07-28T04:59:42.553 に答える