c# - 编辑可变长度列表 ASP.NET MVC 3

标签 c# asp.net-mvc-3 razor jquery-templates editorfor

我的 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/

相关文章:

c# - 如何在asp.net web表单中使用方法="post"的表单

c# - 将 SecureString 与 LogonUser 一起使用

c# - 另一个项目限制中引用的项目

c# - 如何检查现有记录

asp.net-mvc - ASP.NET MVC3 停止在自定义 AuthorizeAttribute 中执行操作/ Controller

.net - RazorEngine(在 MVC 之外) - 可以在不明确指定模型类型的情况下注册模板吗?

c# - 如何在同一 View 中获取 Razor 文本框的值?

c# - 数组和随机数 : count the times an integer is randomly generated

c# - 在 MVC View 中为 HTML DropDownList 创建标签和值

asp.net - 无法运行空的 ASP.Net MVC 3 应用程序