C# MVC DropDownListFor 字符串列表

Posted

技术标签:

【中文标题】C# MVC DropDownListFor 字符串列表【英文标题】:C# MVC DropDownListFor List of Strings 【发布时间】:2013-10-13 19:13:15 【问题描述】:

我正在处理 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”?

【问题讨论】:

您绝对确定StringList[0] 的值为“Test”(区分大小写)? 【参考方案1】:

对于遇到此问题的任何人;

我必须“破解”一个解决方案,我这样做是:

更改我的 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>

也许有更好的方法,但这行得通!

【讨论】:

【参考方案2】:

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

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

【讨论】:

Fals,感谢您回复我。由于这些值是针对列表中的每个项目设置的,但列表中的每个项目都使用相同的下拉菜单,因此这是行不通的。这是因为我需要选择每个元素中保存的值,而不是整体默认值。 您可以根据控制器中的任何条件设置 Selected 属性。这不必设置默认值。您可以从某处检索一个值,与当前的 SelectListItem 进行比较,然后将其设置为选中或不选中。 因为这是一个字符串列表,我最终使用相同的下拉列表得到 n 个项目,下拉列表中有 y 个选项。 n 个项目中的每一个都需要根据其值选择不同的值,而每个项目的 y 选项保持相同。例如,如果我在 PosterOptions 中有 6 个项目,在 StringList 中有 72 个项目,我将呈现 72 个下拉列表,每个下拉列表都选择了不同的 PosterOptions 项目。我不想为下拉菜单创建多个列表【参考方案3】:

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

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

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

【讨论】:

以上是关于C# MVC DropDownListFor 字符串列表的主要内容,如果未能解决你的问题,请参考以下文章

c# mvc关于@Html. DropDownListFor() 或@Html.EnumDropDownListFor() 设置disabled="disabled" post(代

MVC5 Razor html.dropdownlistfor set 当值在数组中时被选中

mvc dropdownlistfor 验证在提交前运行

剑道 DropDownListFor() 与 ASP.NET-MVC

Asp.Net MVC中DropDownListFor的用法(转)

基于下拉选择mvc 4 razor c#的显示/隐藏控件