2010-07-06 2 views
0

Короче говоря, я пытаюсь добавить несколько дополнительных элементов в 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.

+0

Одна из проблем заключается в том, что вы устанавливаете ViewData ["OtherModelNames"] в своем действии, но ожидаете ViewData ["Names"] в своем представлении. – Tahbaza

+0

Спасибо, я исправил это, это была опечатка от анонимности вопроса. ;) – Nate

ответ

1

В контроллере попробовать:

public ActionResult EditView() 
{ 
    var da = new DataAccessClass(); 
    var Names = da.ReadActive(); // returns MyOtherModel 
    var sli = new SelectList(evNames, "ID", "Name"); 
    ViewData.Add("OtherModelNames", new SelectList("ID", "Name", "")); 
    return View(); 
} 

The в представлении

Html.DropDownList("OtherModelNames") 

Чтобы получить Other.Id в DropDownList, просто создать статический Int в классе:

public static int OtherId {get { return this.Other.Id; }} 
Смежные вопросы