我有一个带有 EditorTemplate 的小项目。
我展示了一些最初在 List<T>
中的项目但我希望能够
在用户按下按钮时添加项目。
通常我会像这样将项目添加到 View
@for (int i = 0; i < Model.Models.Count; i++)
{
@Html.EditorFor(model => model.Models[i], "_AddArticleFullQuantity");
}
当我想动态添加项目时,我尝试 创建一个使用ajax调用服务器的按钮
<button id="addButton" type="button" class="btn btn-default btn-block" onclick="m_GUIRequests.AddArtikelToDiv()">add Article</button>
GUIRequests.prototype.AddArtikelToDiv = function ()
{
this.Request.CallAjax("/NewItemDelivery/GetPartialView_AddArticleFullQuantity", "", GUIRequests.AddToView);
}
GUIRequests.AddToView = function (html) {
$("#addedItems").append(html);
}
该按钮对我的 Controller 进行 ajax 调用,它将执行以下操作
public ActionResult GetPartialView_AddArticleFullQuantity()
{
WrongItemsReceivedModel model = new WrongItemsReceivedModel();
ModelContainer<WrongItemsReceivedModel> container = (ModelContainer<WrongItemsReceivedModel>)TempData["ModelContainer"];
container.Add(model);
return PartialView("~/views/Shared/EditorTemplates/_AddArticleFullQuantity.cshtml", container.Models[0]);
}
最后我得到了我期望的结果,它会向我展示我的模板,但是列表中最初显示的项目是有编号的
所以通常我有这样的元素:
<input class="form-control col-md-6 text-box single-line" data-val="true" data-val-required="MESSAGE" id="Models_0__ModelNumberID" name="Models[0].ModelNumberID" onchange="m_GUIRequests.SetWrongItemsReceivedValues()" type="text" value="">
但是我明白了:
<input class="form-control col-md-6 text-box single-line" data-val="true" data-val-required="MESSAGE" id="ModelNumberID" name="ModelNumberID" onchange="m_GUIRequests.SetWrongItemsReceivedValues()" type="text" value="">
我认为这是因为我使用 EditorFor“命令”添加了一个,但另一个添加为 PartialView。 有什么方法可以添加 EditorFor 元素,这样我的逻辑就不会中断?
最佳答案
要在 ASP.NET MVC 中编辑可变长度列表,我建议阅读 following article
.它提供了一种非常简洁的方法来实现这一点。在服务器上,您不需要任何 TempData
来保持持久性,它还说明了一个不错的小 helper 的用法,它可以让您生成正确的输入字段名称。
就您的问题而言,输入名称错误的原因是正确的,因为当您直接从 Controller 操作返回局部 View 时,它不再具有编辑器模板的父上下文。有一些方法可以规避这种情况,但它非常老套,我宁愿推荐本文中介绍的方法。
关于c# - ASP.Net MVC 添加动态 EditorFor 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34653088/