存儲區更新、插入或刪除語句影響到了意外的行數(0)。實體在加載后可能被修改或刪除。刷新 ObjectStateManager 項。


在用asp.net MVC3 的MusicStore時候 Edit某個數據項時提示下面的錯誤:
存儲區更新、插入或刪除語句影響到了意外的行數(0)。實體在加載后可能被修改或刪除。刷新 ObjectStateManager 項。
 
 

這個問題的源頭是

1,[Bind(Exclude = "AlbumId")]
public class Album

[Bind(Exclude = "AlbumId")]表明bind的時候不會取AlbumId,不管你form里面是否有它。

2,

[ScaffoldColumn(false)]
public int AlbumId { get; set; }

導致生成的頁面form里面沒有包含AlbumId。

解決辦法大概有2個:

第一步自然是給form加上AlbumId。

有兩個方法:

1,

[HiddenInput()]
public int AlbumId { get; set; }

2,

@Html.HiddenFor(model => model.AlbumId)

第二步得到AlbumId,有兩個方法:

1,去掉[Bind(Exclude = "AlbumId")]

2,edit方法如下:

[HttpPost]
public ActionResult Edit(int albumId, FormCollection formData)
{
var album = db.Albums.Find(albumId);
if (ModelState.IsValid)
{
object id=formData["AlbumId"];
UpdateModel<Album>(album, formData);
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);
}

為什么需要設置[Bind(Exclude = "AlbumId")]呢,出於安全考慮。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM