Я пытаюсь получить DropDownList Для работы в ASP.NET MVC, используя значения из другой таблицы, чтобы связать модель с выбранной опцией. Полное раскрытие, я очень мало понимаю, что я делаю, и просто отработал примеры.Не удается получить DropdownListДля правильной работы
Создание DropDownList следующим образом:
@Html.DropDownListFor(model => model.GenreId, (SelectList)ViewBag.GenreSelect, new { @class = "form-control" })
GenreId столбец в таблице модели.
я получаю ошибку:
An exception of type 'System.InvalidOperationException' occurred in System.Web.Mvc.dll but was not handled in user code
Additional information: There is no ViewData item of type 'IEnumerable' that has the key 'GenreId'
ViewBag установить, как это прежде, чем идти к виду: (Id и имя столбцы в таблице Жанр)
private void SetGenreViewBag(int? GenreId= null)
{
if (GenreId== null)
ViewBag.GenreSelect= new SelectList(db.Genres, "Id", "name");
else
ViewBag.GenreSelect = new SelectList(db.Genres, "Id", "name", GenreId);
}
Модель имеет столбец для Идентификатор жанра.
Я думаю, что моя основная проблема заключается в том, что я не понимаю синтаксис функции DropDownListFor, плюс есть десяток различных перегрузок для нее, поэтому ее трудно расшифровать. Какова цель первого параметра с лямбдой? Кажется, что вы берете значение, указанное вами из значений списка выбора, но я не понимаю, как это связано с моделью. Не нашли ясного ответа в Интернете.
Я думал, что у меня это работает, но что-то, что я сделал, заставило его перестать работать. Я также работал над этим с DropDownList(), но я увидел, что DropDownListFor будет немного лучше, и я не смог бы правильно использовать атрибуты HTML в DropDownList().
Спасибо!
EDIT: Внутри контроллера:
public ActionResult Create()
{
SetGenreViewBag();
return View();
}
ПРИМЕЧАНИЕ: В раскрывающемся списке отображаются все нужные элементы (то есть жанры), но он выходит из строя, когда я сохранить форму.
// POST: Home/Create
[HttpPost]
public ActionResult Create(Song songToCreate)
{
try
{
db.Songs.Add(songToCreate);
db.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Песня Модель:
namespace MyModule.Models
{
using System;
using System.Collections.Generic;
public partial class Song
{
public int Id { get; set; }
public string name { get; set; }
public int genreId { get; set; }
}
}
Где SetGenreViewBag дозвонились? –
Внутри метода Create() в контроллере. Обновлен вопрос, чтобы включить это. – shim
Пожалуйста, добавьте код метода 'Create' с атрибутом [HttpPost]. – ekad