Опция MVC DropDownList сначала корректно обновляет TryUpdateModel - PullRequest
0 голосов
/ 15 декабря 2009

У меня есть список выбора, который заполняет, предоставляет пустое значение в качестве первой опции в следующей строке. Значение = "0" Показать = "Выбрать тип клиента"

<%= Html.DropDownList("Customer.CustomerType", Model.CustomerTypes, "Select a customer type", new { style = "width:200px" })%>     

Проблема в том, что когда я выбираю любую опцию (скажем, 1 или 2 или 3) - ЗА ИСКЛЮЧЕНИЕМ ПЕРВОГО ("0") - мой объект обновляется правильно. Я публикую на

public ActionResult New(Customer customer) с скажем 2 как одно новое значение (ранее это было 1). Я не использую объект Customer, переданный в перегрузку.

Внутри нового метода, я получаю клиента от

CustomerViewModel inProgress = Session[REGISTRATION_SESSION_KEY] as CustomerViewModel;

Когда я тогда запускаю линию

TryUpdateModel<CustomerViewModel>(inProgress);

объект inProgress изменяется с 1 на 2 (правильно).

Но когда я изменяю с 2 на 0 (опция «Выбрать тип клиента»), inProgress показывает 2 в качестве исходного значения, а после TryUpdateModel остается равным 2.

Единственный обходной путь - получить правильное значение от «клиента», переданного из формы в перегрузку, и выполнить этот хак.

if (customer.CustomerType == 0) 
                inProgress.Customer.CustomerType = 0;

Почему это?

1 Ответ

0 голосов
/ 15 декабря 2009

Это происходит потому, что optionLabel не имеет значения, связанного с ним. Поэтому, когда MVC пытается связать значения формы с моделью, он не видит запись для вашего выбора и предполагает, что она равна нулю. Затем, когда вы делаете TryUpdateModel, он игнорирует значение. Чтобы получить действие, которое вы хотите, поместите null для optionLabel и вставьте его самостоятельно. Вы можете использовать javascript, чтобы сделать это, хотя правильным способом было бы поместить его в список параметров, идущих в представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...