MVC2 html下拉列表是不可见的

时间:2012-04-03 11:04:33

标签: asp.net-mvc asp.net-mvc-2

我只是想在VS2008中使用mvc2填充html.dropdown列表。

但根本不显示控件。

这是我的代码

public ActionResult Index()
{

    ViewData["Time"] = DateTime.Now.ToString();
    var mdl = new List<SelectListItem>();

    mdl.Add(new SelectListItem
    {
        Value = "1",
        Text = "Module One"
    });
    mdl.Add(new SelectListItem
    {
        Value = "2",
        Text = "Module Two"
    });
    ViewData["moduleList"] = new SelectList(mdl,"Value", "Text");

    return View("MainMenu");
}

这是标记

<div>
  <%Html.DropDownList("moduleList", (IEnumerable<SelectListItem>)ViewData["moduleList"]); %>
</div>

我哪里出错?

1 个答案:

答案 0 :(得分:2)

你最好将这些东西放在你的模型中,例如

控制器中的

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC!";

        ViewData["Time"] = DateTime.Now.ToString(CultureInfo.InvariantCulture);
        var mdl = new List<SelectListItem>
                      {
                          new SelectListItem
                              {
                                  Value = "1",
                                  Text = "Module One"
                              },
                          new SelectListItem
                              {
                                  Value = "2",
                                  Text = "Module Two"
                              }
                      };

        ViewData["moduleList"] = new SelectList(mdl, "Value", "Text");

        var model = new HomeModel
                        {
                            SelectedItem = 1,
                            items = mdl
                        };
        return View(model);
    }

}

现在创建模型

namespace MvcApplication1.Models
{
    public class HomeModel
    {
        public int SelectedItem { get; set; }
        public IEnumerable<SelectListItem> items { get; set; }
    }
}

您的网页在测试网站上看起来像这样

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.HomeModel>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Home Page
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2><%: ViewData["Message"] %></h2>
    <p>
        To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
    </p>
    <div> 
  <%=Html.DropDownList("SelectedItem", Model.items)%>
    </div> 
</asp:Content>

现在解释一下,您已经为视图创建了一个模型,并且该模型由控制器返回到页面,该页面继承自ViewPage,该ViewPage获取控制器提供给它的模型的泛型参数< / p>

标记说“给我一个html下拉菜单并将所选项目标记为第一个选中的项目,这些项目来自模型(这是您的控制器提供的项目)。

在现实世界中,数据将来自您的数据层而不是直接来自控制器(我喜欢尽可能少的控制器代码)

编辑:

你的例子有一个拼写错误试试这个

<%= Html.DropDownList("moduleList") %>