繁体   English   中英

动态添加模型行到表

[英]Dynamically add model row to table

我现在已经阅读了很多文章,从Phil Haacks的“模型绑定到列表”到Steve Sanderson的“编辑可变长度列表”,现在试图解决我的问题 - 但是我真的不能让它工作。

我有两个模型 - 订单和文章。 订单有很多文章。 订单视图包含文章表。

目前,我正在使用我的订单视图模型中的EditorFor(model => model.Articles)创建第一个表行。

它识别出Article是一个列表并返回正确的列表项。 到现在为止还挺好。

现在我想要一个链接,将一篇文章添加到表行,但是使用一个AJAX请求到Controller,然后返回一个局部视图(仅包含文章表行)。 我已经使用本教程了解它: http//blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

但是,我的问题是我不知道如何继续ASP.NET MVC“样式”中的文章行序列,以便在提交时获得认可。 (例如文章[1]。数字文章[2]。数量等)

这是我的代码。 “添加文章”链接应添加文章并向/ orders / BlankArticleRow发送ajax请求

public ActionResult BlankArticleRow(int pos)
        {
            Article article = new Article()
            {
                Position = pos
            };

            return View(article);
        }

BlankArticleRow的局部视图如下所示:

@model Bestellinterface.Models.Article

@{
    Layout = null;
}

@Html.EditorFor(model => model)

工作正常。 当我单击“添加文章”链接时,行将被添加,但文本字段等的属性不具有正确的格式。 我想要的是它继续编号html元素,文章[0]。数字,文章[1]。数字,文章[2]。数字......

这是可以使用EditorFor吗? 有没有办法模拟列表,以便它将保持编号?

是的,你可以使用EditorFor

    @{ int i = 0; }
@foreach (var article in Model.Articles)
{
@Html.EditorFor(model => Model.Articles[i])
i++;
}

假设编辑器模板包含字段标题,描述,我们最终会得到文章[i]。标题,文章[i]。描述。

一个解决方案可能是返回包含订单的所有文章的部分,这将确保您的索引正确。

或者,您可以使用javascript更新输入的索引。

为了在从动态表中删除项目时保持索引正确,我写了以下内容:

//reset index values
$('#links-table tbody tr').each(function (index, value) {
    $(this).find('input[type=text]').prop('name', function (i, e) { return e.replace(/(\d+)/g, index) });
});

这将查找每个输入名称中的索引,例如Articles [2]。标题并用新索引替换它。 您可能会在ajax调用成功时执行类似的操作。

希望能帮助Ben

我想你错过了Steve创建的扩展

如果你看一下这篇文章就像这样使用:

<% using(Html.BeginCollectionItem("gifts")) { %>
    Item: <%= Html.TextBoxFor(x => x.Name) %> 
    Value: $<%= Html.TextBoxFor(x => x.Price, new { size = 4 }) %> 
<% }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM