2013-06-11 72 views
2

我的EditorFor有問題。我有以下型號編輯變長列表ASP.NET MVC 3

public class AddNewItemViewModel : BaseViewModel 
{ 
    ... 

    public List<ItemDetailViewModel> ItemDetails { get; set; } 

    public ItemDetailViewModel ItemDetailTemplate { get; set; } 
} 

public class ItemDetailViewModel 
{ 
    //Item details 
    [Required(ErrorMessageResourceName = "BarCodeValidator", ErrorMessageResourceType = typeof(AddNewItem))] 
    [StringLength(50, ErrorMessageResourceName = "BarCodeLenghtValidator", ErrorMessageResourceType = typeof(AddNewItem))] 
    public string BarCode { get; set; } 
    ... 
} 

項目詳細信息映射到EditorFor這是工作的罰款我的問題是我想jquery到一個新的ItemDetails添加到視圖。所以我用Jquery Template

<script id="distanceSuggestionTemplate" type="text/x-jquery-tmpl"> 
@Html.EditorFor(m => Model.ItemDetailTemplate) 
</script> 

和jQuery代碼,在這裏,我不能映射新添加的html List<ItemDetailViewModel> ItemDetails運行此

$("#addNewItemDetail").click(function() { 
    $('#distanceSuggestionTemplate').tmpl({ Index: 1 }).appendTo('#itemTemplate'); 
}); 

的問題,所以我可以得到新的項目已有一個發佈到控制器時。有關如何解決該問題的任何建議?

回答

0

如果你申請EditorFor列出就會產生這樣的:使用@Html.EditorFor(m => Model.ItemDetailTemplate)很可能是

<input id="ItemDetails_0__Barcode" name="ItemDetails[0].Barcode"/> 
<input id="ItemDetails_1__Barcode" name="ItemDetails[1].Barcode"/> 
... 

但是模板:

<input id="Barcode" name="Barcode"/> 

所以它不能被映射到您的名單。

可能的解決方法是使用具有適當列表索引的模板,如:。

`<input id="ItemDetails_n__Barcode" name="ItemDetails[n].Barcode"/>` 

但它似乎不是一個優雅的解決方案。也許你需要重新考慮添加項目的方式(例如使用jQuery和ajax代替ASP.NET MVC編輯器)