2012-04-03 25 views
1

我只是想在VS2008中使用mvc2填充html.dropdown列表。MVC2 html dropdownlist是不可見的

但是控件根本不顯示。

這裏是我的代碼

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

您是否在呈現的頁面上查看源代碼?那裏下降? – 2012-04-03 11:13:54

+0

它最好將這個東西存儲在一個模型中,我已經發布了一個完整的例子,下面是一些解釋,我希望這可以幫助。 – 2012-04-03 11:29:28

+0

不,我沒有看到在我的原始答案中添加的源 – Deb 2012-04-03 11:42:01

回答

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接受了由該模型提供給它的模型的泛型參數控制器

該標記說「給我一個HTML下拉菜單並將選定的項目標記爲第一個選定的項目來自模型(這是你的控制器提供它)。

在現實世界中的數據將來自於你的數據層,而不是直接在控制器(我喜歡在控制器中儘可能少的代碼)

編輯:

您有一個錯字你示例請嘗試此操作

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

這個答案不值得downvote它acheives正是用戶想要的是一個更乾淨的實施 – 2012-04-03 11:31:41

+1

感謝krystan我在其他情況下使用模型,它工作正常。但是這並不能解釋上述問題。我的意思是技術性的,它應該工作,但不是。爲什麼?這是個問題... – Deb 2012-04-03 11:32:50

+0

修復了兩種方式的問題,祝你有個美好的一天:) – 2012-04-03 11:47:15