Связывание моделей с SelectList - PullRequest
1 голос
/ 17 ноября 2008

Я создаю DropDown с помощью метода Html.DropDownList (string NameSelectListInViewData). Это генерирует допустимый ввод Select с правильными значениями. И все хорошо.

Однако при отправке значение в исходном списке выбора не привязано.

Корпус: ViewData.SearchBag.FamilyCodes:

public SelectList FamilyCodes { get; set; }

HTML, который генерирует выпадающий список:

<%=Html.DropDownList("SearchBag.FamilyCodes")%>

Сгенерированный html:

<select id="SearchBag.FamilyCodes" name="SearchBag.FamilyCodes">
    <option value=" ">Any</option>
    <option value="A">BLUE</option>
    <option value="B">BLACK</option>
    <option value="C">BEIGE</option>
    <option value="G">GREEN</option>
    <option value="O">ORANGE</option>
    <option value="P">PURPLE</option>
    <option value="R">RED</option>
    <option value="S">GRAY</option>
    <option value="U">BROWN</option>
    <option value="W">WHITE</option>
    <option value="Y">YELLOW</option>
</select>

В моем контроллере есть действие с параметром searchBag.

public ActionResult AdvancedSearch(SearchBag searchBag) { 
    //Do Stuff with parameters in searchBag
    return View("AdvancedSearch", searchViewData);
}

Все остальные поля связываются просто отлично, только поля выбора - нет. Есть идеи?

UPDATE
Для будущих читателей, возможно, стоит прочитать это сообщение в блоге: http://haacked.com/archive/0001/01/01/model-binding-to-a-list.aspx

Ответы [ 4 ]

0 голосов
/ 03 августа 2009

Если бы вчера была похожая проблема со списками выбора, список сгенерировался бы нормально, просто что на UpdateModel - не получится = - не связан?

И я нашел ответ в списке параметров ...

SelectList (
Collection - items to use in the  drop down,
ValueField - ie the primarykey as a String,
NameField  - ie the name of the thing as a String,
SelectedValue -  which is the passed in current objects FK relationship)

Так что для меня ...

Страна = новый список выбора (db.Countries, "pkCountry", "CountryName", address.fkCountry);

Я использую подход ViewModel - и он есть в конструкторе модели представления ...

public AddressCountryViewModel(){
public SelectList Countrys {get; private set;}
public AddressCountryViewModel(Address address)
{
     Countrys = new SelectList(db.Countries, "pkCountry", "CountryName",address.fkCountry);
}

Затем я получаю значения в контроллерах Редактирую действие и присваиваю объекту, который обновляется ...

address.fkCountry = Convert.ToInt32(collection["fkCountry"]);
0 голосов
/ 02 января 2009

SearchBag должен быть строчным в html (searchBag, а не SearchBag)

0 голосов
/ 02 января 2009

Я думаю, вам нужно изменить тип FamilyCodes с SelectList на string.

public string FamilyCodes { get; set; }

Затем при отправке значение FamilyCodes должно быть значением, выбранным из раскрывающегося списка. У меня есть несколько таких в моем текущем проекте, и у меня нет проблем.

0 голосов
/ 17 ноября 2008

Хотя «SearchBag.FamilyCodes» является допустимым идентификатором HTML, платформа будет пытаться сопоставить каждый элемент формы с соответствующим параметром с тем же именем, и у вас не будет точки в имени параметра. Если назначить отдельный идентификатор для элемента управления (различная перегрузка метода Html.DropDownList), он пройдет?

...