2013-06-11 80 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编辑器)