【发布时间】:2016-09-27 02:35:23
【问题描述】:
我正在使用梅尔空间中建议的解决方案 (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">
-艾伦-
【问题讨论】:
-
显示由
HiddenFor()和DropDownListFor()方法生成的实际html。 -
@StephenMuecke,我已经编辑了我的问题以包含生成的 HTML
-
使用
for-loop生成html,它应该可以工作 -
隐藏输入正在创建正确的
name属性,假设ProductEditModel包含属性IEnumerable<ProductAudioEditModel> ProductAssetAudios并且ProductAudioEditModel包含属性IEnumerable<ProductAssetResourceEditModel> ProductAssetAudios。您需要像当前生成隐藏输入一样生成下拉列表,然后删除隐藏输入 -
我还假设您正在将新项目动态添加到视图中的嵌套集合中,否则您不应该使用它。
标签: c# asp.net-mvc asp.net-mvc-4 razor asp.net-mvc-5