ASP.NET MVC绑定嵌套列表

艾伦·B

我正在使用梅尔(Mel)的空间中建议的解决方案(https://mleeb.wordpress.com/2013/11/23/editing-nested-lists-in-asp-mvc-4/)编辑嵌套列表

基本上我的模型如下

ProductEditModel

 --> ProductAudioEditModel

    --> ProductAssetResourceEditModel

我在下面工作

 @Html.EditorFor(c => resource.TrackTitle, null, Html.GetHtmlName("TrackTitle"))

在编辑时为我提供了正确的值。

但是,我无法在DropDownList上使用它,或者无法在dropdownlist中选择编辑后的值。它始终为我提供控制器中的原始值。

 @using (Html.BeginCollectionItem("ProductAssetAudios", out parentIdentifier))
  {
       .....
        @foreach (var resource in Model.ProductAssetResources.OrderBy(a => a.ResourceNumber))
          {
            string childIdentifier = null; 
             @using (Html.BeginChildCollectionItem("ProductAssetResources", parentIdentifier, out childIdentifier))
              {
                  @Html.HiddenFor(model => resource.AssetResourceStatusId, new { Name = Html.GetHtmlName(childIdentifier, "AssetResourceStatusId") })
                  @Html.DropDownListFor(model => resource.AssetResourceStatusId, new SelectList(visibleResourceStatuses, "AssetResourceStatusId", "Name", resource.AssetResourceStatusId),  new { @class = "inherit-title" }) @Html.ValidationMessageFor(model => resource.AssetResourceStatusId)

              }
          }
  }

即使为其他值选择了下拉列表,AssetResourceStatusId始终保持原始值。

我希望在编辑嵌套列表时,EditorFor和DropDownListFor应该以相同的方式工作。

已编辑

生成的HTML

DropDownListFor

    <select class="inherit-title valid" id="ProductAssetAudios_0df86a5c-0a32-4b0f-97ee-3b3254f743d9__ProductAssetResources_c58ba43c-6081-41d4-88fd-d59799c7374e__resource_AssetResourceStatusId" name="ProductAssetAudios[0df86a5c-0a32-4b0f-97ee-3b3254f743d9].ProductAssetResources[c58ba43c-6081-41d4-88fd-d59799c7374e].resource.AssetResourceStatusId" aria-invalid="false"><option value="3">Extra</option>
    <option selected="selected" value="2">Found</option>
    <option value="8">Ignore</option>
    </select>

隐藏的

<input name="ProductAssetAudios[b5670a6a-7a1d-4c76-86bc-85a05cd144c1].ProductAssetResources[aa378d38-0fb7-4304-9f24-79d0efcb36b9].AssetResourceStatusId" data-val="true" data-val-number="The field AssetResourceStatusId must be a number." data-val-required="The AssetResourceStatusId field is required." id="ProductAssetAudios_b5670a6a-7a1d-4c76-86bc-85a05cd144c1__ProductAssetResources_aa378d38-0fb7-4304-9f24-79d0efcb36b9__resource_AssetResourceStatusId" type="hidden" value="2">

-艾伦-

用户名

您的模型包含一个名为ProductAssetAudios(typeof ProductAudioEditModel的集合属性,并且该集合中的每个对象都包含一个名为ProductAssetResources(typeof ProductAssetResourceEditModel的集合属性,并且每个对象都包含一个名为的属性AssetResourceStatusId

在C#代码中,如果要AssetResourceStatusId在1stProductAssetResourceEditModel中获取1st值,则ProductAudioEditModel代码为

var id = model.ProductAssetAudios[0].ProductAssetResources[0].AssetResourceStatusId;

删除model前缀,这恰好name是控件属性必须是的方式。什么BeginCollectionItem()BeginChildCollectionItem()方法做的是修改集合索引到Guid,并增加了索引一个隐藏的输入,让您可以动态地从集合添加或删除项目。默认情况下,DefaultModelBinder除非将索引器的值也发布(即添加隐藏输入的原因),否则它将绑定从零开始的连续索引器的集合。

在您的情况下,name隐藏输入属性是正确的,即使用

@Html.HiddenFor(model => resource.AssetResourceStatusId, new { Name = Html.GetHtmlName(childIdentifier, "AssetResourceStatusId") })

因为您要覆盖由name生成的默认属性HiddenFor()您只需要对方法做同样的事情DropDownListFor(),即使用设置name属性new { Name = Html.GetHtmlName(childIdentifier, "AssetResourceStatusId") }但是随后,您还需要删除隐藏的输入,因为DefaultModelBinder只会绑定为属性发布的第一个值。另请注意,您还需要更改ValidationMessageFor()


边注。从注释看来,您不想在视图中添加和删除项目,在这种情况下,请不要使用BeginCollectionItem()BeginChildCollectionItem()方法。相反,只需对typeof使用嵌套for循环或自定义使用循环的一个例子EditorTemplatesProductAudioEditModelProductAssetResourceEditModelfor

for(int i = 0; i < Model.ProductAssetAudios.Count; i++)
{
    @Html.TextBoxFor(m => m.ProductAssetAudios[i].SomeProperty)
    ....
    for (int j = 0; j < Model.ProductAssetAudios[i].ProductAssetResources.Count; j++)
    {
        @Html.DropDownListFor(m => m.ProductAssetAudios[i].ProductAssetResources[j].AssetResourceStatusId, new SelectList(.....)

另请参阅此答案以获取使用nested的示例EditorTemplate

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET MVC中的问题模型绑定嵌套列表

来自分类Dev

ASP.NET MVC中的问题模型绑定嵌套列表

来自分类Dev

ASP.NET MVC 5模型绑定列表为空

来自分类Dev

ASP.NET Core 3 MVC:对象列表的模型绑定

来自分类Dev

Asp.net MVC,CheckBoxs在列表的情况下不绑定

来自分类Dev

ASP.NET MVC 5模型绑定列表为空

来自分类Dev

ASP.NET嵌套ListView数据绑定

来自分类Dev

ASP.NET MVC 4 JSON绑定到视图模型-嵌套对象错误

来自分类Dev

角ASP.NET MVC绑定

来自分类Dev

ASP.NET MVC 4绑定

来自分类Dev

Asp.net- Mvc复杂模型绑定

来自分类Dev

ASP.NET MVC 5 ViewModel绑定

来自分类Dev

ASP.NET MVC 中的数据绑定

来自分类Dev

刷新/重新绑定一个下拉列表asp.net MVC

来自分类Dev

删除之间的一项时如何绑定ASP.NET MVC中的对象列表

来自分类Dev

如何将数据表绑定到ASP.net MVC中的下拉列表?

来自分类Dev

在asp.net mvc 4中回发时未绑定到模型的对象列表

来自分类Dev

ASP.Net MVC表单发布无法绑定模型列表属性

来自分类Dev

ASP.NET MVC 5无法在视图上绑定单选按钮列表

来自分类Dev

如何使用C#从asp.net MVC中的枚举绑定一个下拉列表

来自分类Dev

在ASP.NET MVC中,模型绑定通用列表为null

来自分类Dev

ASP.NET MVC:从中间删除输入后,使用模型绑定提交列表

来自分类Dev

ASP.NET MVC模型绑定不适用于项目列表

来自分类Dev

Asp.net MVC模型将不会绑定列表属性以进行查看

来自分类Dev

如何使 ajax 下拉列表与 ASP.Net MVC 5 中的 ViewModel 强绑定

来自分类Dev

基于ASP.NET MVC中的复选框选择填充模型的嵌套列表对象

来自分类Dev

“你调用的对象是空的。” 嵌套列表ASP.NET MVC LINQ实体框架

来自分类Dev

对于大型嵌套复选框列表,ASP.NET MVC 表单 POST 非常慢

来自分类Dev

asp.net MVC级联下拉列表

Related 相关文章

  1. 1

    ASP.NET MVC中的问题模型绑定嵌套列表

  2. 2

    ASP.NET MVC中的问题模型绑定嵌套列表

  3. 3

    ASP.NET MVC 5模型绑定列表为空

  4. 4

    ASP.NET Core 3 MVC:对象列表的模型绑定

  5. 5

    Asp.net MVC,CheckBoxs在列表的情况下不绑定

  6. 6

    ASP.NET MVC 5模型绑定列表为空

  7. 7

    ASP.NET嵌套ListView数据绑定

  8. 8

    ASP.NET MVC 4 JSON绑定到视图模型-嵌套对象错误

  9. 9

    角ASP.NET MVC绑定

  10. 10

    ASP.NET MVC 4绑定

  11. 11

    Asp.net- Mvc复杂模型绑定

  12. 12

    ASP.NET MVC 5 ViewModel绑定

  13. 13

    ASP.NET MVC 中的数据绑定

  14. 14

    刷新/重新绑定一个下拉列表asp.net MVC

  15. 15

    删除之间的一项时如何绑定ASP.NET MVC中的对象列表

  16. 16

    如何将数据表绑定到ASP.net MVC中的下拉列表?

  17. 17

    在asp.net mvc 4中回发时未绑定到模型的对象列表

  18. 18

    ASP.Net MVC表单发布无法绑定模型列表属性

  19. 19

    ASP.NET MVC 5无法在视图上绑定单选按钮列表

  20. 20

    如何使用C#从asp.net MVC中的枚举绑定一个下拉列表

  21. 21

    在ASP.NET MVC中,模型绑定通用列表为null

  22. 22

    ASP.NET MVC:从中间删除输入后,使用模型绑定提交列表

  23. 23

    ASP.NET MVC模型绑定不适用于项目列表

  24. 24

    Asp.net MVC模型将不会绑定列表属性以进行查看

  25. 25

    如何使 ajax 下拉列表与 ASP.Net MVC 5 中的 ViewModel 强绑定

  26. 26

    基于ASP.NET MVC中的复选框选择填充模型的嵌套列表对象

  27. 27

    “你调用的对象是空的。” 嵌套列表ASP.NET MVC LINQ实体框架

  28. 28

    对于大型嵌套复选框列表,ASP.NET MVC 表单 POST 非常慢

  29. 29

    asp.net MVC级联下拉列表

热门标签

归档