我的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
所以我可以在发布到控制器时使用现有的新项目获取该项目。有关如何解决该问题的任何建议?
答案 0 :(得分: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编辑器)