2013-08-08 2 views
1

У меня есть следующие на мой контроллер: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 таким образом, потому что этот объект извлекается из базы данных моим методом, а не жестко запрограммированным. Заранее спасибо!

ответ

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, так как я в основном просто показываю подтверждения/предупреждения.

+0

У меня уже есть объект с сильным типом на моем представлении, он просто не включает список языков, а только тот язык, который он хочет. Но это помогло мне решить мою проблему, выполнив последнюю строчку вашего взгляда. Благодаря! – Gerald

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" }) 
+0

Спасибо за это, но я сейчас использую первый. См. Обновление моего кода. Благодаря! – Gerald

+0

Может быть, вы что-то пропустили. Пожалуйста, см. Мой обновленный asnswer –

+0

Это странно. Я обновил свой код, и теперь у нас одно и то же, но мое не работает. Может пропустить что-то. – Gerald

Смежные вопросы