2016-05-12 4 views
-1

Только что начав с MVC Я пробовал множество сообщений о учебниках/форумах, но до сих пор не могу занести свой DropDownList. Мне удалось отобразить имена пабов в виде ActionLinks в представлении (поэтому правильные данные хранятся в моей модели?), Но были неудачны с DropDownLists.Как заполнить DropDownList в MVC

Ошибки я получаю на первую попытку DropDownList гласит:

«Там нет ViewData элемента типа„IEnumerable“, который имеет ключ" PubID»

Модель:

namespace WineMenu.Models 
{ 
    public class PubListModel 
    {  
     public List<Pub> _pl = new List<Pub>(); 

     public List<Pub> PubList 
     { 
      get 
      { 
       if (_pl.Count == 0) 
       { 
        _pl = GetPubs(); 
       } 

       return _pl; 
      } 
     } 

    public List<Pub> GetPubs() 
    { 
      List<Pub> _pl = new List<Pub>(); 

      SqlConnection con = new SqlConnection(); 
      con.ConnectionString = "Data Source=XXX\\SQLEXPRESS;Initial Catalog=DB_WineMenu;Integrated Security=True"; 
      con.Open(); 

      using (con) 
      { 
       SqlCommand cmd = new SqlCommand("SELECT * FROM Pub", con); 
       SqlDataReader rd = cmd.ExecuteReader(); 

       while (rd.Read()) 
       { 
        Pub p = new Pub(); 

        p.PubId = Convert.ToInt32(rd.GetInt32(0)); 
        p.PubName = Convert.ToString(rd.GetSqlValue(1)); 

        _pl.Add(p); 
       } 
      } 
      return _pl; 
    } 
    } 

    public class Pub 
    { 
     public int PubId { get; set; } 
     public string PubName { get; set; } 
    } 

Контроллер:

public ActionResult GetPubs() 
     { 
      PubListModel p = new PubListModel(); 

      return View("GetPubs", p); 
     } 

Вид:

@model WineMenu.Models.PubListModel 

@{ 
    ViewBag.Title = "GetPubs"; 
} 

<h2>GetPubs</h2> 

@*<h2>Pubs- Last Updated: @Model.PubName</h2>*@ 

<h4>@ViewBag.Message</h4> 
<ul> 
    @foreach (var pub in Model.PubList) 
    { 
     <li>@Html.ActionLink(pub.PubName, "Browse", new { pub = pub.PubName })</li> 

     @Html.DropDownList("PubId", pub.PubName) 
     @* @Html.DropDownListFor(p => p.PubList, Model.PubList)*@ 
    } 

</ul> 
+0

Ну да вы пытаетесь создать раскрывающийся список для класса Pub. Это именно то, что я хотел бы, кроме как ответить. Что вы пытаетесь сделать здесь? – asawyer

+0

Спасибо за ваш ответ. Я пытаюсь заполнить DropDownList всеми пабами в моей БД. Модель имеет свойство списка, которое получает все пабы в БД через метод GetPubs(). Контроллер создает экземпляр модели, и я передаю ее в представление GetPubs. Я вижу, что модель была заполнена через отладчик. Надеюсь, это поможет? – Nick

+0

Ваша модель даже не имеет свойства для привязки (то есть к выбранному 'Pub'). Для вашей модели требуются 2 свойства - 'int SelectedPub' и' IEnumerable 'PubList' и в представлении его' @ Html.DropDownListFor (m => m.SelectedPub, Model.PubList) '. Предложите вам прочитать [этот вопрос/ответ] (http://stackoverflow.com/questions/34366305/the-viewdata-item-that-has-the-key-xxx-is-of-type-system-int32-but- must-be-o), чтобы понять основы. –

ответ

0

попробовать это:

@Html.DropDownListFor(m => m.PubId, new SelectList(Model.PubListModel , "PubId", "PubName "), "--Select--", new { @class = "form-control" }) 
Смежные вопросы