Я создал образец приложения MVC3 для BookShop.У меня есть действие по созданию.В действии создания пользователи вводят название книги, имя автора и выбирают название жанра.Работает без ошибок.Но в контроллере я не получаю название выбранного жанра (- объект жанра имеет значение null).Как мы можем это исправить?
Примечание: Когда я пишу @Html.DropDownList("GenreId", String.Empty)
, возможности привязки модели, встроенные в ASP.NET MVC, будут пытаться заполнить объект этого типа с помощью входных данных формы.Например, он попытается установить значение GenreId объекта книги.Но Book не содержит свойство GenreId.Однако раскрывающийся список может отображать значения путем чтения требуемых значений из ViewBag.
CODE
@model MyBookShopApp.Book
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>BOOK</legend>
<div >
@Html.LabelFor(model => model.Title) :~: @Html.EditorFor(model => model.Title)
</div>
<div >
@Html.LabelFor(model => model.Artist.Name ) :*: @Html.EditorFor(model => model.Artist.Name)
</div>
<div >
@Html.LabelFor(model => model.GenreEntity.Name, "The Genre") :: @Html.DropDownList("GenreId", String.Empty)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
CONTROLLER
namespace MyBookShopApp.Controllers
{
public class StoreManagerController : Controller
{
List<GenreEntity> listOfGenres = new List<GenreEntity>()
{
new GenreEntity { Name = "Fiction", GenreId = 1 },
new GenreEntity { Name = "Science", GenreId = 2 },
new GenreEntity { Name = "Religious", GenreId = 3 },
};
List<Book> bookList = new List<Book>()
{
new Book
{
BookId = 1,Title = "Book1",
GenreEntity = new GenreEntity { Name = "Fiction", GenreId = 1 },
Artist = new Artist { ArtistId = 1, Name = "Dinesh" }
},
new Book
{
BookId = 2,Title = "Book2",
GenreEntity = new GenreEntity { Name = "Science", GenreId = 2 },
Artist = new Artist { ArtistId = 1, Name = "Lijo" }
},
new Book
{
BookId = 3,Title = "Book3",
GenreEntity = new GenreEntity { Name = "Religious", GenreId = 3 },
Artist = new Artist { ArtistId = 1, Name = "Santhosh" }
}
};
#region CREATE
// GET:
public ActionResult Create()
{
ViewBag.GenreId = new SelectList(listOfGenres, "GenreId", "Name");
return View();
}
// POST:
[HttpPost]
public ActionResult Create(Book theBook)
{
if (ModelState.IsValid)
{
//Save the book in DB first and then redirectToAction.
return RedirectToAction("Index");
}
return View(theBook);
}
#endregion
}
}
Класс книги
public class Book
{
public int BookId { get; set; }
public string Title { get; set; }
public GenreEntity GenreEntity { get; set; }
public Artist Artist { get; set; }
}
GenreEntity
public class GenreEntity
{
public string Name { get; set; }
public int GenreId { get; set; }
}
Исполнитель Класс
public class Artist
{
public int ArtistId { get; set; }
public string Name { get; set; }
}
ССЫЛКА :
в форме редактирования mvc3
Как использовать Html.DropDownList в строго типизированном представлении для модели, содержащей свойство enullable enum?
MVC3 HTML-помощник не обновляет DropdownListFor при отправке формы
при выборе события изменения - Html.DropDownListFor
MVC3 @ Html.DropDownListДля невыполнения выбранного элемента