c# - ASP.Net MVC 添加动态 EditorFor 元素

标签 c# jquery ajax asp.net-mvc

我有一个带有 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/

相关文章:

jquery - 使用 jquery 将文本框转换为多行

php - 使用 Ajax(算法)搜索页面

c# - 为什么不注入(inject) IServiceProvider 而不是每个单独的依赖项?

javascript - 如何设置仅在第一次加载页面时弹出?

C# 调用 python 解释器

jquery - 同时在2个div中注册鼠标事件?

javascript - 如何使用新创建的元素刷新 DOM

php - 项目研究 - 可缩放、可滚动、可悬停的高分辨率图像

c# - 在具有多次运行的 WPF Textblock 中,如何将样式应用于特定的样式?

c# - 是否可以使用 Windows 应用程序打包项目打包两个 UWP 应用程序?