2011-08-03 3 views
0

Я новичок в MVC, так что терпите меня ...MVC3 - Введение в летно с DropDownList

Я получил свою новую форму \ вид рабочего (Создание и добавление клиента) Но теперь я хотите, чтобы пользователь так задал страну, в которой новый клиент находится из ниспадающего списка. Но я уверен, как мне это сделать?

ViewModel

public class ClientNew 
{ 
    public string Company { get; set; } 
    public string Address { get; set; } 
    //New 
    public IEnumerable<CountryList> Country{ get; set; } 
} 

public class CountryList 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
} 

Контроллер (Это где может быть не так, и это лучший способ сделать это?)

public ActionResult New() 
{ 
    var cl= new List<CountryList>(); 
    cl.Add(new CountryList(){Id = "abcd",Name = "UK"}); 
    cl.Add(new CountryList() { Id = "abce", Name = "USA" }); 
    var model = new ViewModels.ClientNew(); 
    model.Country= cl; 
    return View("New", model); 
} 

View (не знаю, как отвес это)

Html.DropDownList("Id" ??????) 

ответ

1

В в вашем представлении вы настроите свое раскрывающееся меню на идентификаторе свойства. Это будет текущее значение, выбранное в раскрывающемся списке при отправке POST в вашу форму. Данные, которые будут использоваться для раскрывающегося списка, - это SelectList, называемый странами, которые существуют в вашей модели.

@Html.DropDownListFor(m => m.Id, Model.Countries) 

Ваша модель просмотра будет иметь ваши свойства Id, Name и Countries плюс все, что вам нужно.

public class ClientNewViewModel { 
    public string Id { get; set; } 
    public string Name { get; set; } 

    public SelectList Countries { get; set; } 
} 

В вашем контроллере вам необходимо передать модель на вид. Вам нужно будет заполнить список выбора стран. Имейте в виду, что вам нужно будет заполнить это значение, когда вы выполните POST и не проверите проверку.

public ActionResult New() 
{ 
    var model = new ClientNewViewModel(); 

    model.Countries = new SelectList(service.GetCountries(), 
     "Id", "Name"); // set up what properties are used for id/name of dropdown 

    return View(model); 
} 

[HttpPost] 
public ActionResult New(ClientNewViewModel model) 
{ 
    if(!ModelState.IsValid) 
    { 
     model.Countries = new SelectList(service.GetCountries(), 
      "Id", "Name"); 

     return View(model); 
    } 

    // redirect on success 
    return RedirectToAction("Index"); 
} 
+0

В качестве альтернативы, вы можете иметь IEnumerable Страны на вашей ViewModel, а затем просто сделать Linq проекции в Action для его установки. ИМО это лучший подход, потому что он рефакторизуем и не полагается на магические строки. –

0
Html.DropDownList("Id", 
        Country.Select(x => new SelectListItem 
              { 
               Text = x.Name, 
               Value = x.Id 
              })); 
Смежные вопросы