【问题标题】:Editing a variable length list ASP.NET MVC 3编辑可变长度列表 ASP.NET MVC 3
【发布时间】:2023-03-26 21:22:01
【问题描述】:

我的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,这工作正常我的问题是我想通过jquery向视图添加一个新的ItemDetails。所以我用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&lt;ItemDetailViewModel&gt; ItemDetails,因此我可以在发布到控制器时使用现有的新项目。有关如何解决该问题的任何建议?

【问题讨论】:

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


    【解决方案1】:

    如果您将EditorFor 应用于列表,它将生成如下内容:

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-11-01
      • 1970-01-01
      • 2011-09-09
      • 2012-02-23
      • 1970-01-01
      • 2012-06-29
      • 2012-06-14
      • 1970-01-01
      • 2016-01-04
      相关资源
      最近更新 更多