「MVC Music Store」ですが、現在ASP.NET MVC3に対応したバージョン3が公開されております。
【ASP.NET】MVC Music Store Tutorial
http://www.asp.net/mvc/tutorials/mvc-music-store
【CodePlex】MVC Music Store
http://mvcmusicstore.codeplex.com/
ただし、チュートリアル通りに進めていくと、管理画面のEditのところで、
OptimisticConcurrencyExceptionが発生しエラーとなってしまいます。
原因は Album Model が AlbumId をバインドしないようになっているからです。
Album.cs
namespace MvcMusicStore.Models { [Bind(Exclude = "AlbumId")] //←ココ public class Album { [ScaffoldColumn(false)] public int AlbumId { get; set; } [DisplayName("Genre")] public int GenreId { get; set; } ...
解決するには、この部分を消してしまうか、
Album.cs
namespace MvcMusicStore.Models
{
//[Bind(Exclude = "AlbumId")]
public class Album
{
[ScaffoldColumn(false)]
public int AlbumId { get; set; }
[DisplayName("Genre")]
public int GenreId { get; set; }
...
コントローラー側で別途バインドしてやる必要があります。
StoreManagerController.cs
namespace MvcMusicStore.Models
{
[Authorize(Roles = "Administrator")]
public class StoreManagerController : Controller
{
...
//
// POST: /StoreManager/Edit/5
[HttpPost]
public ActionResult Edit(Album album, int id)
{
if (ModelState.IsValid)
{
album.AlbumId = id; //←ココ
db.Entry(album).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name", album.GenreId);
ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId", "Name", album.ArtistId);
return View(album);
}
...
【参考】
http://mvcmusicstore.codeplex.com/workitem/6648
0 件のコメント:
コメントを投稿