长话短说,我试图向ViewData添加一些额外的项目以使我的生活更轻松,并且它的边缘案例并不真正证明其自己的模型仅适用于这一例。继续阅读更多具体细节。ASP.NET MVC使用DropDownList的强类型化视图
所以我有一个强类型的编辑视图为我的一个对象,一切都很好,直到我试图将一个下拉列表放在视图上,并且ID与我的类的属性不匹配。
我有这个
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
属性。
我也想从DropDownList中设置Other.ID
属性,但它不让我这样做。
我的控制器看起来像这样
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的项目与关键'IEnumerable'类型的'OtherNameIDList'。“
我的期望是,在接受POST的控制器操作中,我将手动使用FormCollection []读出该ID并使用正确的ID填充MyOtherModel。
一个问题是,您在您的操作中设置ViewData [“OtherModelNames”],但在视图中期待ViewData [“名称”]。 – Tahbaza 2010-07-06 20:07:01
谢谢,我修正了这个问题,因为这个问题是匿名的。 ;) – Nate 2010-07-06 20:18:13