MVC2 html выпадающий список невидим - PullRequest
1 голос
/ 03 апреля 2012

Я просто пытаюсь заполнить список html.dropdown, используя mvc2 в VS2008.

Но элемент управления вообще не отображается.

Вот мой код

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 Ответ

2 голосов
/ 03 апреля 2012

Вы лучше всего поместите этот материал в свою модель, например,

в контроллере

[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, который принимает общий аргумент модели, предоставленной ему контроллером

В разметке написано: «Дайте мне выпадающий список html и отметьте выбранный элемент как первый выбранный, элементы поступают из модели (именно это и предоставил ваш контроллер).

В реальном мире данные будут поступать с вашего уровня данных, а не напрямую с контроллера (мне нравится как можно меньше кода в контроллере)

редактирование:

У вас есть опечатка для вашего примера попробуйте это

<%= Html.DropDownList("moduleList") %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...