Я очень новичок в ASP.NET, только что начал учебник MVC сегодня на asp.net. Я получил здесь http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/examining-the-edit-methods-and-edit-viewКак работает @ Html.BeginForm()?
До сих пор так хорошо, проблема:
На мой взгляд, у меня есть следующий код (модель устанавливается в представлении с @model MyFirstMVC4.Models.Movie)
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Movie</legend>
@Html.HiddenFor(model => model.ID)
//... bla bla html input
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
Мой MovieController
// Shows the view
public ActionResult Edit(int id = 0)
{
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
//
// POST: /Movie/Edit/5
[HttpPost] // Handles the view above
public ActionResult Edit(Movie movie)
{
if (ModelState.IsValid)
{
db.Entry(movie).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(movie);
}
И вот вопрос - Как, черт возьми, это передать объект Movie методу POST выше ?! Когда я наблюдаю на стороне клиента есть
<form action = "/Movie/Edit/1" ... />
Вот я не понимаю, почему действие = URL из той же странице просмотра?! 1 Кроме того, на стороне сервера есть только Html.BeginForm() :( Как это понять, какой из методов действия, чтобы отправлять и какой маршрут параметры пройти? он работает, я просто не знаю, почему
Играя с переопределениями для '@ Html.BeginForm' - я поставил' Html.BeginForm («Edit», «Movies», FormMethod.Post) '. Заметьте, что я не предоставил третью часть id пути. Однако в полученной разметке она есть: '/ Movies/Edit/4'. Как оно работает? Если я suppy 'Html.BeginForm (« Удалить »,« Фильмы », FormMethod.Post), в результате HTML не будет' id': '/ Movies/Delete'. – mmcrae