Короче говоря, я пытаюсь добавить несколько дополнительных элементов в ViewData, чтобы облегчить мою жизнь, и его краевой кейс, который на самом деле не оправдывает свою собственную модель только для этот один случай. Продолжайте читать для получения более подробной информации.ASP.NET MVC строго типизированный вид с DropDownList
Таким образом, у меня есть строго типизированный вид редактирования для одного из моих объектов, все отлично работает, пока я не попытаюсь поместить раскрывающийся список в представление с идентификатором, который не соответствует свойству моего класса.
Я это
public class MyModel
{
public String Name {get;set;}
public int ID {get;set;}
public MyOtherModel Other {get;set;}
}
public class MyOtherModel
{
public String Name {get;set;}
public int ID {get;set;}
}
Я могу обновить Name
собственность.
Я также хотел бы установить свойство Other.ID
из DropDownList, но это не позволяет мне сделать это.
Мой контроллер выглядит следующим образом
public ActionResult EditView()
{
var da = new DataAccessClass();
var Names = da.ReadActive(); // returns MyOtherModel
var sli = new SelectList(evNames, "ID", "Name");
ViewData["OtherModelNames"] = sli;
return View();
}
Мой Вид выглядит следующим образом:
<p>
<label for="EndTime">Name:</label>
<%= Html.TextBox("Name") %>
<%= Html.ValidationMessage("Name", "*")%>
</p>
<p>
<label for="EndTime">Other Name:</label>
<%= Html.DropDownList("OtherNameIDList", (SelectList)ViewData["OtherModelNames"]) %>
<%= Html.ValidationMessage("OtherNameIDList", "*")%>
</p>
Я получаю ошибку на этой линии <%= Html.DropDownList("OtherNameIDList", (SelectList)ViewData["Names"]) %>
«Там нет пункта ViewData с ключом 'OtherNameIDList' типа 'IEnumerable'. "
Мое предположение заключается в том, что в действии контроллера, которое принимает POST, я вручную использую FormCollection [] для считывания этого идентификатора и заполнения MyOtherModel с правильным ID.
Одна из проблем заключается в том, что вы устанавливаете ViewData ["OtherModelNames"] в своем действии, но ожидаете ViewData ["Names"] в своем представлении. – Tahbaza
Спасибо, я исправил это, это была опечатка от анонимности вопроса. ;) – Nate