2

我的EditorFor. 我有以下型号

  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工作正常我的问题是我想ItemDetails在视图中添加一个新的jquery。所以我用Jquery Template

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

和运行它的 Jquery 代码

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

这里的问题是我无法将新添加的 html 映射到,List<ItemDetailViewModel> ItemDetails因此我可以在发布到控制器时将新项目与现有项目一起获取。有关如何解决该问题的任何建议?

4

1 回答 1

0

如果您申请EditorFor列表,它将生成如下内容:

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

但使用@Html.EditorFor(m => Model.ItemDetailTemplate)的模板可能是:

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

所以它不能映射到你的列表。

可能的解决方法是使用具有适当列表索引的模板,例如:。

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

但这似乎不是一个优雅的解决方案。也许您需要重新考虑添加项目的方式(例如,使用 jQuery 和 ajax 而不是 ASP.NET MVC 编辑器)

于 2013-08-15T12:00:02.417 回答