クライアントが望む特定の方法で、ユーザーがリスト内のオブジェクトを追加および削除できるビューを作成しています。ユーザーは、送信する前にページで複数のフォームを追加または削除できる必要があります。ページが投稿されると、リストに既に含まれているものを表示し、各項目を削除するオプションがあり、ユーザーが再度送信する前にオブジェクトを追加/削除できるようにする必要があります。
JQuery と部分ビューを使用して、ユーザーが送信前に新しいフォームを追加または削除できるようにしました。私が理解できないのは、以前の送信からリストに既にあるオブジェクトを削除するボタンを提供する方法です。
誰でもこれで私を助けることができますか? それは大歓迎です。
これが私がこれまでに理解したものです。私からしてみれば:
@using (Html.BeginForm())
{
<div id="recipients">
@foreach (var p in Model)
{
@Html.Partial("_Recipient", p)
}
<div id="recipients0"></div>
</div>
<button id="add" type="button">Add</button>
<button id="remove" type="button">Remove</button>
<input type="submit" value="Save" />
}
<script type="text/javascript">
$('#add').click(function () {
var url = '@Url.Action("Recipient")';
var div = $('#recipients');
var divlast = $('div[id^="recipients"]:last');
var num = parseInt(divlast.prop("id").match(/\d+/g), 10) + 1;
var newdiv = $(document.createElement('div')).attr('id', 'recipients' + num)//rest of code
$.get(url, function (response) {
div.append(newdiv);
newdiv.append(response);
});
})
$('#remove').click(function () {
var div = $('#recipients');
var divlast = $('div[id^="recipients"]:last');
var num = parseInt(divlast.prop("id").match(/\d+/g), 10);
alert("div[id='recipients" + num + "']");
$("div[id='recipients" + num + "']").remove();
//div.remove('div[id^="recipients' + num + '"]');
})
新しいオブジェクトにデータを追加するためのフォームを含む部分ビュー:
@using (Html.BeginCollectionItem("recipients"))
{
@Html.HiddenFor(m => m.ID)
@Html.LabelFor(m => m.Recipient)
@Html.TextBoxFor(m => m.Recipient)
@Html.ValidationMessageFor(m => m.Recipient)
<br />
@Html.LabelFor(m => m.Amount)
@Html.TextBoxFor(m => m.Amount)
@Html.ValidationMessageFor(m => m.Amount)
}
<td>
@Ajax.ActionLink(
"Remove",
"Remove",
"CashRecipients",
new AjaxOptions
{
HttpMethod = "POST",
OnSuccess = "onDeleteSuccess"
}
)
</td>
<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
<script>
var onDeleteSuccess = function (result) {
alert('Howdy');
};
</script>
私のコントローラー:
public PartialViewResult Recipient()
{
return PartialView("_Recipient", new CashRecipientViewModel());
}
// GET:
public ActionResult Create()
{
List<CashRecipientViewModel> model = new List<CashRecipientViewModel>();
return View(model);
}
// POST: CashRecipients/Create
[HttpPost]
public ActionResult Create([Bind(Include = "ID,Amount,Recipient")] IEnumerable<CashRecipientViewModel> recipients)
{
return View(recipients);
}
私のビューモデル:
public class CashRecipientViewModel
{
public int? ID { get; set; }
public decimal Amount { get; set; }
[Required(ErrorMessage = "Please enter the name of the recipient")]
public string Recipient { get; set; }
}