带有 DropDownList 的 ASP.NET MVC 强类型视图

Posted

技术标签:

【中文标题】带有 DropDownList 的 ASP.NET MVC 强类型视图【英文标题】:ASP.NET MVC Strongly Typed View With DropDownList 【发布时间】:2010-07-06 19:59:22 【问题描述】:

长话短说,我正在尝试向 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>

我在这一行遇到错误&lt;%= Html.DropDownList("OtherNameIDList", (SelectList)ViewData["Names"]) %&gt;

“没有键为“IEnumerable”的“OtherNameIDList”的 ViewData 项。”

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

【问题讨论】:

一个问题是您在操作中设置了 ViewData["OtherModelNames"] 但在视图中期望 ViewData["Names"]。 谢谢,我修正了这个问题,这是匿名提问时的拼写错误。 ;) 【参考方案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; 

【讨论】:

以上是关于带有 DropDownList 的 ASP.NET MVC 强类型视图的主要内容,如果未能解决你的问题,请参考以下文章

asp.net的DropDownlist绑定数据

带有 SumoSelect 的 ASP.Net Web 表单

csharp ASP.NET MVC中的DropDownList #dropdownlist #selectlist

asp.net中用datatable给dropdownlist绑定数据

使用 ASP.NET 的 DropDownList 中的错误

asp.net 绑定DropDownList