2011-06-24 29 views
0

私は、Phil Haacksの "モデルバインディングリスト"からSteve Sandersonの "可変長リストの編集"への記事を読んで今問題を解決しようとしていますが、本当にうまくいきます。テーブルにモデル行を動的に追加する

私は2つのモデル - 注文と記事を持っています。注文には多くの記事があります。オーダービューにはarticlesテーブルが含まれています。

現在、OrderFor View Model(Model => model.Articles)を使用して最初のテーブル行を作成しています。

これは、Articlesがリストであり、正しいリスト項目を返すことを認識します。ここまでは順調ですね。

これで記事を表の行に追加するが、ControllerへのAJAXリクエストを使用して、記事の表の行のみを含む部分ビューを返すリンクが必要になりました。 http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

しかし、私の問題は、ASP.NET MVCスタイルの記事行シーケンスをどのように続けることができるかわからないため、送信時に認識されるようになっていることです。 (例:記事[1]。番号記事[2]。番号など)

ここに私のコードです。

@model Bestellinterface.Models.Article 

@{ 
    Layout = null; 
} 

@Html.EditorFor(model => model) 

作品罰金:リンク「の記事を追加する」の記事を追加し、受注/ BlankArticleRow

public ActionResult BlankArticleRow(int pos) 
     { 
      Article article = new Article() 
      { 
       Position = pos 
      }; 

      return View(article); 
     } 

/にAJAXリクエストを送信する必要がありBlankArticleRowのための部分的なビューは次のようになります。 「記事を追加」リンクをクリックすると、行が追加されますが、テキストフィールドなどの属性には正しい書式がありません。私は欲しいのは、html要素の番号付けを続けているということです。記事[0]。番号、記事[1]。番号、記事[2]。番号...

EditorForでは可能ですか?番号を付け続けるようにリストをシミュレートする方法はありますか?このため

答えて

2

はい、あなたが使用することができEditorFor

@{ int i = 0; } 
@foreach (var article in Model.Articles) 
{ 
@Html.EditorFor(model => Model.Articles[i]) 
i++; 
} 

エディタテンプレートを想定すると、我々は[i]が.TITLE、記事[i]は.DESCRIPTION記事で終わるだろうフィールドタイトル、説明が含まれています。

あなたのための1つの解決策は、あなたのインデックスが正しいことを保証する注文のためのすべての記事を含む部分を返すことかもしれません。

また、入力のインデックスをjavascriptで更新することもできます。

//reset index values 
$('#links-table tbody tr').each(function (index, value) { 
    $(this).find('input[type=text]').prop('name', function (i, e) { return e.replace(/(\d+)/g, index) }); 
}); 

これは、例えば、各入力の名前のインデックスを探します:動的テーブルから項目を削除するときに、正しいインデックスを維持するために

は、私は次のように書いています記事[2]。それを新しいインデックスで置き換えます。あなたは潜在的にあなたのajax呼び出しの成功に似たようなことをすることができます。

希望私はあなたがそれをこのように使用されている記事を見てみるとスティーブは

を作成した拡張欠けていると思う ベン

+0

こんにちはベンを、そのコードを一番上に置きますか?私のOrderViewModelには、記事をレンダリングするためのコードが既に含まれているので、うまく動作します。私の問題は部分的なビューであり、テーブルの行だけをレンダリングする必要があります。私が本当に探しているのはEditorForのパラメータで、エディタフォースは入力を "リストスタイル"でレンダリングしますが、AFAIKは不可能なので、おそらくjavascriptの解決策に固執します。 – user1320304

0

に役立ちます:Iべき

<% using(Html.BeginCollectionItem("gifts")) { %> 
    Item: <%= Html.TextBoxFor(x => x.Name) %> 
    Value: $<%= Html.TextBoxFor(x => x.Price, new { size = 4 }) %> 
<% } 
+0

残念ながら、スティーブ・サンダーソンが作成した拡張機能は、それぞれの「行」に対してランダムなIDを生成するため、私にとって役に立ちません。このチュートリアルでは、以下のシーケンスを生成することはより多くの作業であると言います(でも、必要なことはそうです)。 – user1320304

+0

私はそれに従うかどうかはわかりません...ランダムな値を生成しますが、MVCだけで、データベースレベルでIDの生成を意味する場合、これは問題ではありません。私はアイデンティティ列でこのテクニックを使用しました.... –

+0

拡張機能によって生成される値は、DBに保存するのに使用するIDと同じではありません。 –

関連する問題