使用DropDownList的ASP.NET MVC强类型视图

时间:2010-07-06 19:59:22

标签: c# asp.net .net asp.net-mvc

长话短说,我正在尝试为ViewData添加一些额外的项目,以使我的生活更轻松,并且它的边缘情况并不能仅仅为这一个案例证明其自己的模型。继续阅读以获取更多具体细节。

所以我有一个强类型的编辑视图,我的一个对象,一切都很好,直到我尝试在视图上放置一个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"]) %>

上收到错误消息

“没有带有'IEnumerable'类型的'OtherNameIDList'的ViewData项。”

我的期望是在接受POST的控制器操作中,我将手动使用FormCollection []读出该ID并使用正确的ID填充MyOtherModel。

1 个答案:

答案 0 :(得分: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();
}

在视图中

Html.DropDownList("OtherModelNames")

要获取下拉列表中的Other.Id,只需在类中创建一个静态int:

public static int OtherId {get { return this.Other.Id; }}