2013-10-07 23 views
1

我正在处理需要从下拉列表中选择的mvc中的字符串项目列表。下拉列表绑定正常,并且值设置正常,但即使当前正在迭代的项目与下拉列表中的项目匹配,它也没有被预先选中,因为它是值,任何人都可以指向正确的方向?所以对于这种情况,Options是只包含一个值的字符串列表,“Test” - >设置为Text和Value;C#MVC DropDownListFor字符串列表

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

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

+0

你绝对肯定'StringList [0]'的值是“Test”(它是区分大小写的)? –

回答

4

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

我不得不“黑客”的解决方案,我这样做是:

更改我的视图模型的(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> 

也许有更好的办法,但这个工程!

0

另一种方式可能是列表创建过程中设置当前选择的项目,如:

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

Fals,谢谢你回到我身边。 由于这些值是按列表中的每个项目设置的,但列表中的每个项目都使用相同的下拉菜单,所以这不起作用。这是因为我需要选择每个元素中的值,而不是整体默认值。 – EverythingGeek

+0

您可以根据控制器中的任何条件设置Selected属性。这不是必需的设置默认值。您可以从某处获取值,并与当前的SelectListItem进行比较,然后将其设置为选中或不选。 – Fals

+0

由于这是与一个字符串列表一起工作,我最终得到n个项目使用相同的下拉列表,并在下拉列表中有y个选项。这n个项目中的每一个将根据它的值需要不同的选定值,而y选项对于每个项目保持不变。 例如,如果我在PosterOptions中有6个项目并且在StringList中有72个项目,那么我将有72个下拉列表呈现,每个列表都选择了不同的PosterOptions项目。我不希望为Drop Downs创建多个列表 – EverythingGeek

0

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

作为一个小重构,你可以摆脱临时变量和直接访问选择的值是这样的:

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