Dropdownlistfor不会显示正确的选择Dropdownlistfor不会显示正确的选择(D

2019-05-12 10:31发布

我有一个三个筋斗dropdownlistfor不显示从数据库中正确的值。 他们总是默认为第一项。 我已经检查和双重检查数据库,并验证了它应该是第二个在列表中。 也正确创建列表。 我在想什么?

        @foreach (CustomerMeasurementProfile oProfile in Model.Customer.CustomerMeasurementProfiles.Where(m => m.DeletedDate == null))
        {

            <div class="valuesforoneprofile form-group form-group-tight col-md-2">
                <div class="col-md-11" >
                    @Html.Hidden(string.Format("Customer.CustomerMeasurementProfiles[{0}].Id", i), oProfile.Id)
                    @Html.Hidden(string.Format("Customer.CustomerMeasurementProfiles[{0}].CustomerId", i), oProfile.CustomerId)
                    @Html.TextBox(string.Format("Customer.CustomerMeasurementProfiles[{0}].Name", i), oProfile.Name, new { @class = "form-control input-sm" })
                </div>
                <div class="col-md-11" style="text-align:center">
                    @Html.CheckBox(string.Format("DeleteProfiles[{0}]", i), Model.DeleteProfiles[i])
                </div>
                <div class="col-md-11" style="padding-top:4px;">
                    @Html.DropDownListFor(m => oProfile.BodyTypeShoulderId, new SelectList(Model.BodyTypeShoulders, "Id", "Name"), new { @class = "form-control input-sm-select" }) 
                </div>
                <div class="col-md-11" style="padding-top:4px;">
                    @Html.DropDownListFor(m => oProfile.BodyTypePostureId, new SelectList(Model.BodyTypePosture, "Id", "Name"), new { @class = "form-control input-sm-select" })
                </div>
                <div class="col-md-11" style="padding-top:4px;">
                    @Html.DropDownListFor(m => oProfile.BodyTypeChestId, new SelectList(Model.BodyTypeChest, "Id", "Name"), new { @class = "form-control input-sm-select" }) 
                </div>

Answer 1:

如果你想设置选定值在未来的型号 。 你需要做的是这样的:

@Html.DropDownListFor(m => oProfile.BodyTypeShoulderId, 
                           new SelectList(Model.BodyTypeShoulders, 
                                          "Id", 
                                          "Name",
                                          oProfile.BodyTypeShoulderId), 
                           new { @class = "form-control input-sm-select" })

上面的代码将设置的下拉选择的值,以无论是在当前模型对象BodyTypeShoulderId

的第一个参数DropDownListFor告诉上形式交下拉选择的值将被映射与设定有示范性(我们传递m => oProfile.BodyTypeShoulderId ),但是这没有选择台价值。

用于设置所选的值必须传递SelectList使用第四参数这个重载的SelectList类的哪个是object selectedValue



Answer 2:

不幸的是@Html.DropDownListFor()在循环中呈现控件时比其他佣工的行为有点不同。 对于单个对象

@Html.DropDownListFor(m => oProfile.BodyTypeShoulderId, new SelectList(Model.BodyTypeShoulders, "Id", "Name"))

将正常工作(如果值BodyTypeShoulderId的一个选项的值相匹配,则该选项将被选中)。 伊赫桑已经在循环中使用时,它显示一个解决办法,但你有一些其他的问题,在你的代码,并非最不重要的是,因为你用你的许多属性将不会发布回到正确地收集foreach循环,而不是for循环(这是产生重复的nameid属性)。 你还产生了新SelectList中环这是不是很有效的每次迭代。

您可以通过使用一个解决这两个和下拉选择问题EditorTemplate 。 假设属性CustomerMeasurementProfiles是typeof运算CustomerMeasurementProfiles ,然后

CustomerMeasurementProfiles.cshtml(它添加到Views/Shared/EditorTemplatesViews/YourController/EditorTemplates

@model CustomerMeasurementProfiles
@Html.HiddenFor(m => m.ID)
@Html.HiddenFor(m => m.CustomerId)
....
@Html.DropDownListFor(m => m.BodyTypeShoulderId, (SelectList)ViewData["shoulders"])
....

在视图模型,添加对性能SelectList的和项的集合过滤来显示

IEnumerable<CustomerMeasurementProfiles> ActiveCustomerMeasurementProfiles { get; set; }
public SelectList BodyTypeShoulderList { get; set; }
....

并在控制器指定的那些值

然后在主视图

@using (Html.BeginForm())
{
  ...
  @Html.EditorFor(m => m.ActiveCustomerMeasurementProfiles, new { shoulders = Model.BodyTypeShoulderList })
  ...

使用@Html.EditorFor()与收集将正确地命名控制(和正确选择正确的选项)和回传, ActiveCustomerMeasurementProfiles现在可以正确与它的所有属性填充。



文章来源: Dropdownlistfor will not show the correct selection