1

好的,我有一种情况,我需要有多个使用同一字典的“BayTypes”的 DDL,这不是问题。每个 'n' BayOptions 一个 DDL。我将字典作为“BayTypes”传递给我的视图,如下所示:

(控制器)

var bayTypes = _bayTypeRepository.GetBayTypes().ToList();
property.BayTypes = bayTypes.ToDictionary(g => g.Name, g => g.BayTypeGuid.ToString());

(看法)

var overrideValue = item.BayTypeOverride ? item.BayTypeOverrideValue.BayTypeGuid.ToString() : string.Empty;
var result = (from x in Model.BayTypes
              select new SelectListItem()
                  {
                  Text = x.Key,
                  Value = x.Value,
                  Selected = x.Value == overrideValue <-- ***this is working***
                  });
if (item.BayTypeOverride == true)
    {
     @Html.DropDownListFor(x => x.BayTypes, result, new { @Name = "BayOptionsToSubmit[" + aCounter + "].BayTypeOverrideValue" })
    }
    else
    {
     @Html.DropDownListFor(x => x.BayTypes, result, new { @Name = "BayOptionsToSubmit[" + aCounter + "].BayTypeOverrideValue", @style = "display:none;" })
    }

在“结果”对象中选择了正确的项目。如果我逐步进行并观看“结果”,我可以看到正确的“Selected = true”......但它在渲染时没有在 DDLFor 中选择......

我错过了什么?

4

2 回答 2

2

最终,决定下拉菜单中“选定”项目的是ModelState,而不是SelectListItem.Selected属性。ModelState由以下来源组成:RequestViewDataViewBag和 finally Model

检查Request["BayTypes"]ViewData["BayTypes"]ViewBag.BayTypes和的值Model.BayTypes。如果其中任何一个的值与您期望被选中的值不同,那就是您的问题,特别是如果该值甚至不在大致范围内。

例如,造成这种情况的一个常见原因是开发人员将他们的实际选择列表选项存储在类似的东西中ViewBag.Foo,然后尝试将其应用于绑定到Model.Foo. 此时选择列表本身成为 中的选定项ModelState,而不是您选择的一个特定值。

于 2015-07-09T16:29:42.957 回答
0

解决了... 更改为 .DropDownList(没有“For”)并传入“名称”作为之前创建的“结果”变量。作品。

var overrideValue = item.BayTypeOverride ? item.BayTypeOverrideValue.BayTypeGuid.ToString() : string.Empty;
var result = (from x in Model.BayTypes
              select new SelectListItem()
              {
                Text = x.Key,
                Value = x.Value,
                Selected = x.Value == overrideValue
               });
               if (item.BayTypeOverride)
               {
                @Html.DropDownList("result", result, htmlAttributes: new { @Name = "BayOptionsToSubmit[" + aCounter + "].BayTypeOverrideValue" })
               }
               else
               {
                @Html.DropDownList("result", result, htmlAttributes: new { @Name = "BayOptionsToSubmit[" + aCounter + "].BayTypeOverrideValue", @style = "display:none;" })
                                }
于 2015-07-09T18:05:27.523 回答