2011-06-24 91 views
0

我已经阅读了一堆文章,从Phil Haacks的“模型绑定到列表”到Steve Sanderson的“编辑可变长度列表”,现在试图解决我的问题 - 但是我couln真的没有工作。动态添加模型行到表

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

目前,我在我的Order View Model中使用EditorFor(model => model.Articles)创建第一个表格行。

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

现在我想要一个链接,将一篇文章添加到表格行,但通过使用AJAX请求到控制器,然后返回一个局部视图(只包含文章表格行)。我已经得到了使用这个教程的工作:http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

但是,我的问题是,我不知道如何我可以继续在ASP.NET MVC“风格”的文章行序列,以便它会得到承认提交。 (例如文章[1] .Number Articles [2] .Number等)

这是我的代码。 “添加文章”链接应该添加的文章,发送一个Ajax请求/命令/ BlankArticleRow

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] .Number,文章[1] .Number,文章[2] .Number ...

这是可能的EditorFor?有没有办法模拟一个列表,以便它将继续编号?

回答

2

是的,你可以使用EditorFor此:

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

假定编辑模板包含字段标题,说明我们最终会与文章[I] .title伪,文章[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) }); 
}); 

这会在每个输入的名称索引例如文章[2]。标题并用新索引替换它。您可能会在您的ajax调用成功时做类似的事情。

希望帮助 本

+0

您好本,我在那里应该将该代码放在顶部?我只是问,因为我的OrderViewModel已经包含这样的代码来呈现文章,它的工作正常 - 我的问题是部分视图,它应该只呈现该表行。我真正想要的是EditorFor的参数,它强制EditorFor以“列表样式”呈现输入,但AFAIK不可能,所以我可能会坚持使用javascript解决方案。 – user1320304

0

我认为你缺少史蒂夫创建

扩展如果你看文章就这样使用:

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

不幸的是,Steve Sanderson创建的扩展对我没有帮助,因为它会为每个“行”生成一个随机ID。本教程还指出,生成以下序列是更多的工作(但多数民众赞成什么我需要) – user1320304

+0

我不知道我跟着...它会生成一个随机值,但只有MVC可以跟踪值的一起。如果您的意思是在数据库级别生成ID,那么这不会成为问题。我已经使用这种技术与身份列.... –

+0

只是为了澄清...扩展产生的价值,是不是你将用于保存在数据库中的Id。 –