我正在一个ASP.NET MVC创建页面上,我希望能够为用户提供添加多个元素(如果他们愿意)的选项。我这样做的方法是在create动作的get方法中创建一个列表,并用5个空元素填充该列表,以供用户输入。然后,我将其呈现在视图中,如果该字段不为null,则将它们发布到数据库中,这一切都很好。
我希望对此进行改进,并为用户提供一个文本框,然后允许他们单击按钮以添加更多元素并动态填充列表。
我设法使用ajax调用按钮向视图添加更多元素,以调用部分视图动作,但是当我提交表单时,没有任何内容发布到我的create post方法中,我可以通过将鼠标悬停来查看在调试模式下覆盖对象。
所以我的问题是我提交表单时什么都没发布,这是我第一次在这里发布,感谢您的帮助。
准备好创建列表
[HttpGet]
public ActionResult Create()
{
var viewModel = new ElementViewModel();
viewModel.ElementList = new List<ElementViewModel>();
return View(viewModel);
}
为列表中的每个元素调用局部视图的视图
<table>
<thead>
<tr>
<th>Heading</th>
</tr>
</thead>
<tbody>
@foreach(var element in Model.ElementList)
{
@{ Html.RenderPartial("_PartialElement", element); }
}
</tbody>
</table>
每个元素的部分
@model ElementViewModel
<tr>
<td>@Html.TextBoxFor(model => Model.Name)</td>
</tr>
单击按钮时通过ajax调用的局部视图方法
public PartialViewResult _NewElement()
{
return PartialView("newElement", new ViewModel());
}
最后,创建元素的发布操作
[HttpPost]
public ActionResult Create(ElementViewModel viewModel)
{
foreach(var element in viewModel.ElementList)
{
if(element.Name != "")
{
_context.Table.Add(new ElementEntity
{
Name = element.Name
});
_context.SaveChanges();
}
}
}