mvc下拉列表未显示所选索引

时间:2013-08-08 06:45:21

标签: c# asp.net-mvc

我的控制器上有以下内容:

string preferredLanguage = "fr-ca";
ViewData["Languages"] = new SelectList(languages, "Code", "Name", preferredLanguage);

在视图上:

@Html.DropDownList("Languages", (SelectList)ViewData["Languages"], new { id = "Languages" });

我的问题是我的下拉菜单没有将选定的下拉列表设置为应该是法语的首选语言。

注意:

languages

中的值
1) Name = "English"
   Code = "en-us"

2) Name = "French"
   Code = "fr-ca"

下拉列表显示两种语言,英语和法语。英语被设置为选定的索引,但我想要的是法语。

我以这种方式显示languages的原因是因为这个对象是从数据库检索我的方法而不是硬编码。提前谢谢!

3 个答案:

答案 0 :(得分:1)

我建议使用绑定到模型的强类型助手;这些方面的东西:

<强>型号:

public class LanguageFormModel
{
    public string SelectedLanguage { get; set; }

    public SelectList Languages { get; set; }
}

<强>动作:

[HttpGet]
public ActionResult YourActionName()
{
    // replace this with however you're getting your language variable
    var languages = new CollectionOfSomeSort();

    var model = new LanguageFormModel()
    {
        SelectedLanguage = "fr-ca",
        Languages = new SelectList(languages, "Code", "Name", "fr-ca")
    };

    return View(model);
}

查看:

@model Your.Fully.Qualified.Namespace.LanguageFormModel

@Html.LabelFor(m => m.SelectedLanguage)
@Html.DropDownListFor(m => m.SelectedLanguage, Model.Languages, "Select one...")

我个人并不喜欢将ViewData用于除简单邮件以外的任何内容,即便如此我使用TempData,因为我主要只是展示确认/提醒。

答案 1 :(得分:0)

这对我来说很好。

Dictionary<string, string> languages = new Dictionary<string, string>() { { "en-us", "English" }, { "fr-ca", "French" } };
ViewData["Languages"] = new SelectList(languages, "key", "value", "fr-ca");

视图

@Html.DropDownList("Language", ViewData["Languages"] as SelectList, new { id = "Languages" })

答案 2 :(得分:0)

这没关系:

@Html.DropDownList("languages")