В вашем методе EditMovie
объект movie
, который вы получаете в качестве аргумента, на самом деле не является объектом, связанным с базой данных.Он создается для вас во время выполнения MVC, а ваш DataContext
не знает об этом.Поэтому, когда вы вызываете Update()
, DataContext
не видит никаких изменений для записи в базу данных.
Вместо этого вам нужно найти этот объект в базе данных, а затем скопировать все поля изаргумент метода в него, а затем вызвать Update()
.Например:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditMovie(Movie movie)
{
if (!ModelState.IsValid)
return View(movie);
var existingMovie = _movieRepository.FetchById( movie.Id );
existingMovie.Title = movie.Title;
_movieRepository.Update();
return RedirectToAction("Index");
}
Чтобы это работало, вы также должны включить в форму идентификатор своего фильма (в виде скрытого поля), чтобы он мог быть опубликован браузером и таким образом позволить вамразличать обновление одного фильма от обновления другого.Например:
<legend>Details</legend>
<p>
<label for="Title">Title:</label><br/>
<%= Html.TextBox("Title", Model.Title) %>
<%= Html.ValidationMessage("Title", "*") %>
<%= Html.HiddenFor( m => m.Id ) %> //<------
</p>
РЕДАКТИРОВАТЬ : Как указал Mystere Man , вам не нужно добавлять это скрытое поле, если ваш URL содержит идентификатор.