我只是想在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>
我哪里出错?
答案 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") %>