Steven Sanderson のブログの助けを借りて、動的な数のテキスト ボックスと DropDownList が生成されるビューを実装しました。すべて正常に動作します。しかし、各ドロップダウンリストに値が入るまでフォームを送信できず、ドロップダウンリストがない場合はすべての動的コンテンツが削除され、フォームを送信してはなりません。
メイン ビュー コード:
<div id="Part2">
<h3><u>Services:</u></h3><br />
<div id="EditorRows">
<%Html.RenderPartial("_InsertServices", Model);%>
</div>
<div id="DontAppend">
<%= Html.ActionLink("+ Add Another Service", "Add", null, new { id = "addItem" }) %>
<input type="button" id="btnEdit" value="Edit" hidden="hidden"/>
<input type="button" id="btnDone" value="Done" />
</div>
</div>
PartialView コード:
<div class="EditorRow">
<% using (Html.BeginCollectionItem("services")){ %>
<table id="table1">
<tr>
<td>NOS:</td>
<td><%:Html.DropDownListFor(model=>model.Id,(SelectList)ViewData["crmServiceType"] as SelectList,"---")%></td>
<td>Comment:</td>
<td><%=Html.TextBoxFor(model => model.Comment, new { size = "20" })%></td>
<td><a href="#" class="deleteRow">delete</a></td>
</tr>
</table>
<% } %>
</div>
JavaScript:
$("#addItem").click(function () {
$.ajax({
url: this.href,
cache: false,
success: function (html) { $("#EditorRows").append(html); }
});
return false;
});
$("a.deleteRow").live("click", function () {
$(this).parents("div.EditorRow:first").remove();
return false;
});
これが生成された HTML ソースです。