私はjQueryを使用して動的に行を追加しているかみそりビューページにフォームを持っています。動的に作成されたフィールドを配列にバインドして、配列を1つずつ参照してデータベースのテーブルに挿入できるようにしたい。問題は、フィールドが配列ではなく個々のフィールドとして "FormCollection"に表示されることです。asp.net mvcでフォーム提出時に動的に作成されたフィールドを配列にバインドする方法は?
ビューページの添付画像を参照してください:新しい行を追加する
jQueryのスクリプト:
$(function() {
var tableRowNum = 1;
$("#add-work-row").click(function() {
tableRowNum++;
var tableRow = "<tr>";
tableRow += "<td><input name='works[" + (tableRowNum - 1) + "].workCover' type='checkbox' class='text' /></td>";
tableRow += "<td><input name='works[" + (tableRowNum - 1) + "].workTitle' type='text' class='text work-title caps' /></td>";
tableRow += "<td><input name='works[" + (tableRowNum - 1) + "].workComposers' type='text' class='text work-composer caps' /></td>";
tableRow += "<td><input name='works[" + (tableRowNum - 1) + "].workPerformances' type='text' class='text work-performances' /></td>";
tableRow += "<td><input name='works[" + (tableRowNum - 1) + "].workDuration' type='text' class='text work-duration input-duration' /></td>";
tableRow += "<td><a href='#' class='delete-row'></a></td>";
tableRow += "</tr>";
$("#worksTable").append(tableRow);
return false;
});
});
コントローラのアクションは次のとおりです。新しいを追加するための
public ActionResult CreateReport(FormCollection form)
{
// works is null?
var works = form["works"];
foreach (var work in works)
{
// Do something
}
return null;
}
'FormCollection'を使用しないMVCでは、モデルにバインドします。また、新しい行やバインドする必要のあるモデルをどのように生成するかを示していません。 –
'FormCollection'の代わりに' IEnumerable 'を使います。ここで' YourViewModel'はテーブルの行を表します。モデルバインディングに関するPhil Haackの記事を参照してください。http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/ –
erdinger
@StephenMuecke、私は行を追加するjqueryスクリプトを追加しましたテーブルに。おそらく、プロパティworks []を持つモデルを作成してバインドすることができます。しかし、別のSOの答えでは、フィールドを "works [0] .fieldName"という名前にすると、 "works"という名前の配列にバインドされます。このコンセプトはここでは機能しませんでした。 – TejSoft