字符串列表的C#MVC下拉列表

字符串列表的C#MVC下拉列表,c#,asp.net-mvc,razor,html.dropdownlistfor,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])) {

我正在处理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])
        }
    }

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

我必须“破解”一个解决方案,我通过以下方式做到:

更改我的ViewModel(Model.Options)

将列表添加到列表中
将我的下拉列表选择更改为以下内容,强制选择所选值

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

@{
string currentString=Model.StringList.ElementAt(i).ToString();
}
@DropDownListFor(m=>m.StringList[i],new SelectList(Model.Options,currentString),String.Empty,new{})

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

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

我必须“破解”一个解决方案,我通过以下方式做到:

更改我的ViewModel(Model.Options)

<代码>列表到列表 将我的下拉列表选择更改为以下内容,强制选择所选值

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

@{
string currentString=Model.StringList.ElementAt(i).ToString();
}
@DropDownListFor(m=>m.StringList[i],new SelectList(Model.Options,currentString),String.Empty,new{})

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

另一种方法是在列表创建过程中设置当前选定项,如下所示:

PosterOptions.Add(new SelectListItem() { Text = "Test", Value = "Test", Selected = true });
@Html.DropDownListFor(m => m.StringList[i], new SelectList(Model.Options, Model.StringList[i]), String.Empty, new {})

另一种方法是在列表创建过程中设置当前选定项,如下所示:

PosterOptions.Add(new SelectListItem() { Text = "Test", Value = "Test", Selected = true });
@Html.DropDownListFor(m => m.StringList[i], new SelectList(Model.Options, Model.StringList[i]), String.Empty, new {})

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

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

PosterOptions.Add(new SelectListItem() { Text = "Test", Value = "Test", Selected = true });
@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; }

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

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

PosterOptions.Add(new SelectListItem() { Text = "Test", Value = "Test", Selected = true });
@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; }

福尔斯,谢谢你给我回电话。由于这些值是针对列表中的每个项目设置的,但列表中的每个项目都使用相同的下拉列表,所以这不起作用。这是因为我需要选择每个元素中保留的值,而不是总体默认值。您可以根据控制器中的任何条件设置所选属性。这不是设置默认值的必要条件。您可以从某处检索一个值,与当前的SelectListItem进行比较,然后将其设置为selected或not。由于这是一个字符串列表,因此我使用相同的下拉列表得到n个项目,下拉列表中有y个选项。n个项目中的每一个都需要根据其值选择不同的值,而y选项对每个项目保持不变。例如,如果我在PosterOptions中有6个项目,在StringList中有72个项目,我将呈现72个下拉列表,每个下拉列表都选择了不同的PosterOptions项目。我不想为下拉列表创建多个列表,谢谢您回复我。由于这些值是针对列表中的每个项目设置的,但列表中的每个项目都使用相同的下拉列表,所以这不起作用。这是因为我需要选择每个元素中保留的值,而不是总体默认值。您可以根据控制器中的任何条件设置所选属性。这不是设置默认值的必要条件。您可以从某处检索一个值,与当前的SelectListItem进行比较,然后将其设置为selected或not。由于这是一个字符串列表,因此我使用相同的下拉列表得到n个项目,下拉列表中有y个选项。n个项目中的每一个都需要根据其值选择不同的值,而y选项对每个项目保持不变。例如,如果我在PosterOptions中有6个项目,在StringList中有72个项目,我将呈现72个下拉列表,每个下拉列表都选择了不同的PosterOptions项目。我不想为下拉列表创建多个列表您绝对肯定
StringList[0]
的值是“Test”(区分大小写)?您绝对肯定
StringList[0]
的值是“Test”(区分大小写)?