我的 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
所以我可以在发布到 Controller 时用现有的项目获得那个新项目。关于如何解决该问题的任何建议?
最佳答案
如果你应用 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 编辑器)
关于c# - 编辑可变长度列表 ASP.NET MVC 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17052132/