ユーザーがドロップダウン リストを作成し、項目を動的に追加できるようにする ASP MVC 3 ページがあります。たとえば、これはページが最初にロードされたときの外観です。
左側の情報は、ドロップダウン リストを配置するページ ( Navbar Item
) と、ドロップダウン リストに付ける名前 (明らかにDrop Down List Name
) を指定するために使用されます。
右側 (Allowed Value
およびDisplay Value
) の情報は、特定のドロップダウン リスト項目になります。ユーザーがAdd Another
リンクをクリックすると、Ajax 呼び出しがコントローラーに送られ、部分的なビューが返され、次のDrop Down Items
<fieldset>
ように追加されます。
問題は、ユーザーがSubmit
ボタンを押すと、どのアイテムもコントローラーに到達しないことです。
私はまだASP MVCに比較的慣れていないので、これが正しい方法であるかどうか疑問に思っています。これはリストに項目を動的に追加する適切な方法ですか?
このビューがコントローラーで最初に作成された方法は次のとおりです
public ActionResult NewList()
{
List<DropDownValues> drop = new List<DropDownValues>();
drop.Add(new DropDownValues());
return View(drop);
}
タイプのリストDropDownValues
が作成され、このタグが上部にあるビューに送信されます
@model IEnumerable<Monet.Models.DropDownValues>
以下の Ajax 呼び出し
<script>
$(document).ready(function () {
$("#addItem").click(function () {
if ($('#Field').text() != "" && $('#DisplayPage').text() != "") {
$.ajax({
url: '@Url.Action("BlankDropDownItem", "DropDownValues")',
data: { field: $('#Field').val(), displayPage: $('#DisplayPage').val() },
dataType: 'html',
cache: false,
success: function (html) {
$("#items").append(html);
}
});
} else {
alert("Please enter a Drop Down List Name and Navbar Item first!");
}
return false;
});
});
</script>
このコントローラーメソッドを呼び出します
public ActionResult BlankDropDownItem(string field, string displayPage)
{
DropDownValues partial = new DropDownValues();
partial.Field = field;
partial.DisplayPage = displayPage;
return PartialView("DropDownItemPartial", partial);
}
次に、この部分ビューをメイン ページに追加します
@model Monet.Models.DropDownValues
@Html.HiddenFor(model => model.Field)
@Html.HiddenFor(model => model.DisplayPage)
<div class="editor-label">
@Html.LabelFor(model => model.AllowedValue)
</div>
<div class="label-field">
@Html.EditorFor(model => model.AllowedValue)
@Html.ValidationMessageFor(model => model.AllowedValue)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.DisplayValue)
</div>
<div class="label-field">
@Html.EditorFor(model => model.DisplayValue)
@Html.ValidationMessageFor(model => model.DisplayValue)
</div>
すべての新しいアイテムが正しい値でデータベースに保存されるようにするために、隠しフィールドを使用しようとしていField
ますNavbar Item
(繰り返しますが、これが適切な方法であるかどうかはわかりません)。
アドバイス/提案をいただければ幸いです。どうも!