【发布时间】:2015-01-23 17:29:55
【问题描述】:
我在 For 循环中使用 Ajax.BeginForm 允许我为 for 循环中的每个项目发布到控制器。最初,for 循环在页面加载时正确呈现每个项目。 当控制器处理了从 Ajax.BeginForm 正确填充的传入视图模型时,该方法将新生成的视图模型发回给视图,但是我的 For 循环中的每个项目现在都是重复的,并且所有文本框现在都有提交的视图模型的值。
非常困惑如何正确构建此代码,我需要提交基于 ajax 和部分视图的工作。我确实看过使用 JQuery 提交,但担心我可能会丢失 AntiForgeryToken 并且 Ajax.BeginForm 是一种更优雅的方法。非常感谢任何帮助。也很高兴提供更多信息。
查看
@model Namespace.Models.MyParentViewModel
@for (int i = 0; i < Model.Items.Count; i++)
{
using (Ajax.BeginForm("SaveItem", "Controller", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "pensions" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()
<div>
@Html.Hidden("ID", Model.Items[i].ID)
@Html.TextBox("TheName", Model.Items[i].TheName, new { @class = "form-control", @id = "item-" + i})
<input type="submit" value="Save" class="btn save" name="Command" />
</div>
}
}
控制器
[HttpPost]
[ValidateAntiForgeryToken]
[ActionName("SaveItem")]
public ActionResult SaveItem(MyItemViewModel mivm, string Command)
{
if (ModelState.IsValid)
{
#do some logic
}
// Return a newly populated MyViewModel with updated mivm.
var model = PopulateMyParentViewModel();
return PartialView("_MyPartialView", model);
}
private MyParentViewModel PopulateMyParentViewModel()
{
List<MyItemsViewModel> lstItems = new List<MyItemsViewModel>();
foreach (var item in enity.items.OrderBy(p => p.ID).ToList())
{
var ExistingItem = new MyItemViewModel
{
ID = item.ID,
TheName = item.TheName
};
lstItems.Add(MyItemViewModel);
}
MyParentViewModel.Items = lstItems;
return MyParentViewModel
}
【问题讨论】:
标签: asp.net-mvc asp.net-ajax ajax.beginform