2013-03-01 7 views
0

Возможно, вопрос уже задан, но ответ, который я нашел, не ясен.ASP.NET MVC 4: выберите значение по умолчанию для Dropdowlist для использования в режиме с сильным типом

Я хотел бы выбрать значение по умолчанию для моего раскрывающегося списка. У меня есть список стран и на основе регионального кода retreive через Thread.CurrentThread.CurrentCulture, я бы хотел выбрать страну пользователя.

Удастся ли с помощью моего подхода:

Посмотреть

@model Question 
@Html.DropDownListFor(b => b.SelectedAnswer,new SelectList(Model.Answers,"ID","Country")) 

Модель

public class Question 
    { 

     public int ID { get; set; } 
     public string Country { get; set; } 

     public List<Answer> Answers { get; set; } 
     [Required] 
     public int SelectedAnswer { get; set; } 
     public int Order { get; set; } 

     public Question() 
     { 
      Answers = new List<Answer>(); 
     } 
    } 

Спасибо.

ответ

1

Я собирался добавить это как комментарий, но длина слишком длинная, и таким образом, если я получу полезность, вы можете принять это как ответ.

Это метод, который я использую для реализации этого;

Во-первых, в ViewModel У меня есть следующий

public int FooID { get; set; } 
public IEnumerable<SelectListItem> FooList { get; set; } 

FooID будучи как значение по умолчанию (или выбранный) и имущество, используемое для сбора результата пост.

У меня есть функция, чтобы построить FooList, которая возвращает тип List, используя этот формат для каждого элемента:

new SelectListItem { Text = i.Name, Value = i.FooID.ToString() }; 

Перед выводом модели представления, текущее значение вставляются в FooID, или, если это для нового элемента, я обычно устанавливаю значение 1, значение по умолчанию.

Затем для вывода;

@Html.DropDownListFor(m => m.FooID, Model.FooList) 

Просто помните, что FooID будет передано в виде строки, поэтому нужно будет собирать в виде строки FooID параметра и преобразуется в Int. Пока FooID установлен до того, как viewmodel будет передана в представление с контроллера, элемент в FooList, значение которого равно FooID, будет установлен как значение по умолчанию ... Например;

public ActionResult MyAction() 
    { 
     MyVM vm = new MyVM(); 
     vm.FooID = 1; 
     vm.FooList = FunctionToGenerateFooList(); 

     return View(vm); 
    } 
+0

Точно так же, как указано, я пропустил что-то довольно простое (сначала я это сделал, я смотрел в этом файле сегодня утром и посмотрел, я совсем забыл, что я его изменил) Проще было бы решить вместо установка vm.FooID = 1 в действии GET, при создании списка вы можете сделать это для значения по умолчанию: новый SelectListItem {Text = i.Name, Value = i.FooID.ToString(), Selected = true}; – EverythingGeek

0

Действительно, вы должны передать свой выпадающий список как список, содержащий SelectListItem. Затем для каждой страны введите текст как код страны и присвойте ему идентификатор в значении. Затем, когда вы инициализацию модели, собирать культуру, и найти, какой элемент в списке есть текст, который соответствует

Thread.CurrentThread.CurrentUICulture.Name; 

и присвоить это значение свойства SelectedAnswer.

+0

Вы имеете в виду что-то вроде этого: @ Html.DropDownList ("CountryID", (IEnumerable ) ViewBag.Countries). Я использовал идентификатор, чтобы сделать небольшой тест. А в контроллере: var query = db.Countries.Select (c => new {c.CountryID, c.Name}); ViewBag.Countries = new SelectList (query.AsEnumerable(), "CountryID", "Name", CountryId); Но это не работает. Если я использую SelectedAnwser, это не известно для сопоставления, если я использую CountryID, он не будет возвращаться во время POST. – fix105