2011-06-24 90 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。 –