2

サーバー側のMVC2ビューを、ネストされたIList要素を持つオブジェクトで機能させるために、過去数週間にわたって何度も試しましたが、あまり成功しませんでした。この質問が解決することを願っているという基本的な理解が欠けています。

私が欲しいのは、階層(それぞれにサブ製品のリストがある製品のリスト、それぞれに画像のリストがある製品のリストなど)を含む、情報をインラインで変更できる製品のリストを表示するフォームです。古いMSAccessフォームを再作成しようとしています。大きなフォームには製品のリストがあり、サブフォームには関連製品が表示され、すべてインライン編集が可能です。Accessは、異なるレコードに焦点を合わせると、各レコードを保存します。

次のようなドメインモデルがあるとします。

public class Product {
    ... // Lots of fields like public string name {get; set;}
    public IList<Department> departments {get; set;}
    public IList<SubProduct> subProducts {get; set;}
}
public class SubProduct {
    ... // Lots of fields like public string name {get; set;}
    public IList<Image> images {get; set;}
}
public class Image {
    ... // Lots of fields like public string name {get; set;}
}

そして、次のようなビューモデル:

public class EditProduct {
    IList<Product> products {get; set;}
}

MVC 2ビューで、単一のモデルをコントローラーにポストバックできるように、編集フィールドをどのようにコーディングしますか?私はに精通しています

<input id="products[0].subProducts[0].images[0].name" /... >

メカニックですが、各IListには、同じ画面上の要素をCRUDする方法が必要です。これはビッグデータ入力画面であり、リスト内のすべての製品を表示できるのと同じくらい速度が重要です。[追加]ボタン、[削除]ボタン、および入力を編集した後にフォーム全体を投稿する手段が必要です。

JQueryの観点から見ると:

  • モデルをJSONとしてシリアル化し、最初のN個のIList要素の初期フォームを作成します
  • コンテナdivの一番下に達したときに、同じリストに追加の製品をその場でロードします
  • 保存/投稿時にモデル全体を受け入れるか、IList要素ごとに個別のhtmlフォームタグを設定するなど、個々のエンティティに対して同じフォームの一部を受け入れます

しかし、何らかの理由で、サーバー側でこれを行う方法がわかりません。ビュー自体のリンクやサンプルコードは素晴らしいでしょう。IListのない要素は、特にUIテンプレートでうまく機能するようです。編集可能な各エンティティの周りに個別のhtmlフォームタグの束を作成し、投稿で一度に1つの要素のみを処理するようにしますか?

4

1 に答える 1

0
<% for (int count = 0; count < Model.Students.Count; count++ )
   {                                              %><%= 
      Html.EditorFor(m => m.Students[count])      %><%
   } 
%>

次のようなフォーム名を作成します。

name="Students[0].Name"
name="Students[1].Name"
name="Students[2].Name"

元のリスト ビュー モデルにバインドするもの

于 2010-02-23T05:29:54.173 に答える