У меня есть DropDownList, заполненный списком SelectList, сгенерированным из (анонимного типа), который имеет два свойства: CountryId (int) и «Description» (строка). Я хочу, чтобы выбранная страна в списке была страной по умолчанию.
Countries = new SelectList(countries, "CountryId", "Description", defaultCountry.CountryId);
где "страны" - это IQueryable анонимных типов из запроса Linq. Страна является публичной собственностью по модели представления:
public class CountryBaseViewModel
{
public SelectList Countries { get; set; }
public Contact Contact { get;set; }
....
}
HTML выглядит так:
<p>
<label for="CountryId">Home Country:</label>
<%= Html.DropDownList("CountryId", Model.Countries)%>
</p>
Это нормально, и когда я загружаю страницу, выбирается правильная страна.
Но когда я отправляю изменение в метод Edit на контроллере, привязка кажется неудачной.
Например, когда я использую следующий HTML
<p>
<label for="Contact.Job">Job/Post:</label>
<%= Html.TextBox("Contact.Job", Model.Contact.Job) %>
</p>
И я называю метод
public ActionResult Create(Contact contact)
на контроллере, тогда значение contact.Job правильно вводится из TextBox, а CountryId - нет.
Я предполагаю, что MVC использует параметр "Contact.Job" (TextBox 1st), чтобы установить это. Но первым параметром DropDownList является «CountryId», а не «Contact.CountryId», потому что если это так, то выбранное значение не отображается в списке при его загрузке.
Похоже, что первый параметр TextBox предназначен для привязки данных, а первый параметр DropDownList - найти выбранный элемент.
Как использовать этот стиль привязки данных, чтобы получить выбранное значение, которое я хочу в DropDownList, а затем привязать его к Model.Contact.Country?