2

我正在处理 mvc 中需要从下拉列表中选择的字符串项目列表。下拉列表绑定良好,值设置良好,但即使当前迭代的项目与下拉列表中的项目匹配,它也没有被预先选择为它的值,任何人都可以指出我正确的方向?

    @for (var i = 0; i < Model.StringList.Count; i++)
    {
        if (BL.Helpers.StringHelpers.Validate(Model.DisplayStringSegments[i]))
        {
            <div id="editor-field">
                @Html.DropDownListFor(m => m.StringList[i], Model.PosterOptions, String.Empty, new { })
            </div>
        }
        else
        {
            <div id="editor-label">@Model.StringList[i]</div>
            @Html.HiddenFor(model => model.StringList[i])
        }
    }

所以对于这种情况,选项是一个只包含一个值的字符串列表,“测试”-> 设置为文本和值;

       PosterOptions.Add(new SelectListItem() { Text = "Test", Value = "Test" });

谁能告诉我为什么当前的 StringList[i] 没有被预选,即使它的值为 "Test" ?

4

3 回答 3

4

对于遇到这种情况的任何人;

我不得不“破解”一个解决方案,我这样做了:

更改我的 ViewModel (Model.Options)

List<SelectListItem> to a List<string>

将我的下拉列表选择更改为以下,强制选择值;

            <div id="editor-field">
                @{
                    string currentString = Model.StringList.ElementAt(i).ToString();
                 }

                @Html.DropDownListFor(m => m.StringList[i], new SelectList(Model.Options, currentString), String.Empty, new {})
            </div>

也许有更好的方法,但这有效!

于 2013-10-07T10:15:58.287 回答
0

另一种方法可能是在列表创建期间设置当前选定的项目,如下所示:

PosterOptions.Add(new SelectListItem() { Text = "Test", Value = "Test", Selected = true });
于 2013-10-07T14:14:55.153 回答
0

我有同样的问题,你的回答帮助了我。我不认为这是一个“黑客”。因为在您的问题中,您对所有下拉列表使用相同的 SelectList,所以即使您提到您不想为下拉列表创建多个列表,当您需要指定多个下拉列表时,我看不到另一种方式不同的选择值。

作为一个小的重构,您可以摆脱 temp 变量并直接访问选定的值,如下所示:

@Html.DropDownListFor(m => m.StringList[i], new SelectList(Model.Options, Model.StringList[i]), String.Empty, new {})

在您的示例中,您不需要区分文本和值,但在我的情况下它是必需的。必要时,可以通过为 SelectList 提供值和文本字段名称来完成。例如,假设您需要多个具有 Country 值的下拉列表,例如:

国家级:

public class Country
{
    public string Code { get; set; }
    public string Name { get; set; }
}

模型:

public List<string> CustomerCountryList { get; set; }
public IEnumerable<Country> CountryList { get; set; }

和视图:

@Html.DropDownListFor(m => m.CustomerCountryList[i], new SelectList(Model.CountryList, "Code", "Name", Model.CustomerCountryList[i]))
于 2015-06-12T13:47:17.970 回答