C#MVC DropDownListFor字符串列表

时间:2013-10-07 09:19:32

标签: c# asp.net-mvc razor html.dropdownlistfor

我正在处理需要从下拉列表中选择的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])
        }
    }

因此,对于这种情况,Options是一个只包含一个值的字符串列表,“Test” - &gt;将它们设置为文本和值;

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

有人能告诉我为什么当前的StringList [i]没有被预先选中,即使它的值为“Test”吗?

3 个答案:

答案 0 :(得分: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>

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

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

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

国家/地区类:

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]))