сохранение моделей просмотра mvc - PullRequest
2 голосов
/ 18 июля 2011

Привет, я прохожу учебник по адресу:

http://www.asp.net/mvc/tutorials/mvc-music-store-part-1

Вместо использования ViewBag я пытался заставить его использовать viewModels.

create GET стал:

public ActionResult Create()
{
    return View();
} 

У создания POST теперь есть AlbumViewModel:

[HttpPost]
public ActionResult Create(AlbumViewModel albumViewModel)
{
    if (ModelState.IsValid)
    {
        //db.Albums.Add(albumViewModel);
        //db.SaveChanges();
        return RedirectToAction("Index");  
    }

    return View(albumViewModel);
}

Модель ViewModel должна содержать раскрывающийся список Жанры, а не передавать их вместе с ViewBag.1015 * Класс AlbumViewModel:

public class AlbumViewModel
{
   public Album Album { get; set;}
   public SelectList Genres = new SelectList(repository.Genres, "Name", "Id");
}

Как видно из сообщения Создать, я не уверен, как сохранить вновь созданный альбом с помощью GenreId.

Может кто-нибудь сказать, пожалуйстамне, как ты это делаешь?

1 Ответ

4 голосов
/ 18 июля 2011

Чтобы сохранить изменения, вам необходимо сопоставить модель представления с моделью домена EF (альбом).Лично я использую AutoMapper для выполнения этой задачи, поскольку это упрощает большую часть кодирования.

[HttpPost]
public ActionResult Create(AlbumViewModel albumViewModel)
{
    if (ModelState.IsValid)
    {
        var album = Mapper.Map<AlbumViewModel, Album>(albumViewModel);
        db.Albums.Add(album);
        db.SaveChanges();
        return RedirectToAction("Index");  
    }

    return View(albumViewModel);
}

Также в вашем действии GET вы должны передавать модель представления в представление, или есть вероятность, чтовы получите NRE, когда попытаетесь отобразить выпадающий список:

public ActionResult Create()
{
    var albumViewModel = new AlbumViewModel();
    return View(albumViewModel);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...