После набора мямления это сводится к следующей строке кода
if (ViewData.ModelState.TryGetValue(key, out modelState))
, что означает, что MVC пытается разрешить значение, только смотря на ViewData Dictionary<> возражают и не пересекающий вниз в ViewData. Объект модели.
, Является ли это ошибкой, ограничением или проектным решением, я не уверен. Однако можно зафиксировать его следующий путь:
<%= Html.TextBox("MyTextBox", ViewData.Model.MyTextBox) %>
попытайтесь установить выбранное значение в действии контроллера при создании набора SelectList.
ViewData["AddressTypeId"] = новый SelectList (CustomerService. AddressType_List (), "AddressTypeId", "Имя", myItem. AddressTypeId);
Хорошо, я могу что-то упустить из этого потока, однако в C # работает следующее:
Html.DropDownList("ProfessionGuid", (SelectList)ViewData["Professions"])
Где « ProfessionGuid
» - это значение, которое нужно выбрать в списке.
В VB.Net, я полагаю, это будет:
Html.DropDownList("ProfessionGuid", ViewData["Professions"] AS SelectList)
На самом деле вам просто нужно передать null
для Html.DropDownList ()
.
У меня была точно такая же проблема, и я использовал Reflector для просмотра исходного кода MVC.
В System.Web.Mvc.Extensions.SelectExtensions.SelectExtensions
класса SelectInternal ()
метод, он проверяет, имеет ли параметр selectList значение null или нет.
Если он передается как null
, он выполняет поиск в SelectList
должным образом.
Вот «Код программной части».
ViewData["MyDropDown"] = new SelectList(selectListItems,
"Value",
"Text",
selectedValue.ToString()
);
Вот код просмотра HTML.
<%= Html.DropDownList("MyDropDown", null,
"** Please Select **",
new { @class = "my-select-css-class" }
) %>
Примечание. Я использую ASP.NET MVC 2.0 (бета-версия).
После интенсивного использования ASP.NET MVC в течение последних 3 лет я предпочитаю использовать additionalViewData
из метода Html.EditorFor ()
подробнее.
Передайте свой [List Items] как анонимный
объект с тем же именем свойства , что и свойство модели, в Html.EditorFor ( )
метод.
<%= Html.EditorFor(
m => m.MyPropertyName,
new { MyPropertyName = Model.ListItemsForMyPropertyName }
) %>
Если вам нужны подробности, обратитесь к мой ответ в другой ветке здесь .
Если у вас есть проблемы с недопустимыми или нулевыми ViewData, обратите внимание на действия вашего контроллера.
Предположим, у вас есть ViewData с именем MyList для Html.DropDownlist с именем MyList.
Если вы вызовете ModelState.AddModelError ("MyList", "Пожалуйста, выберите профессию")
, вы замените содержимое списка ViewData текстом этого предупреждения.
Вот почему у людей в Интернете возникают нулевые проблемы с ViewData в DropDownList.
Суть в том, что обратите внимание на свои идентификаторы в модели ошибок, они не должны мешать вашим элементам управления html.