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 当值在数组中时被选中
剑道 DropDownListFor() 与 ASP.NET-MVC