-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>
Ну да вы пытаетесь создать раскрывающийся список для класса Pub. Это именно то, что я хотел бы, кроме как ответить. Что вы пытаетесь сделать здесь? – asawyer
Спасибо за ваш ответ. Я пытаюсь заполнить DropDownList всеми пабами в моей БД. Модель имеет свойство списка, которое получает все пабы в БД через метод GetPubs(). Контроллер создает экземпляр модели, и я передаю ее в представление GetPubs. Я вижу, что модель была заполнена через отладчик. Надеюсь, это поможет? – Nick
Ваша модель даже не имеет свойства для привязки (то есть к выбранному '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), чтобы понять основы. –