Sono molto nuovo ad ASP.NET, ho appena avviato il tutorial MVC oggi su asp.net. Sono arrivato qui http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/examining-the-edit-methods-and-edit-viewCome funziona @ Html.BeginForm()?
Fin qui tutto bene, il problema:
a mio avviso ho il seguente codice (modello è impostato per la vista con @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>
}
mio 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);
}
Ed ecco la domanda - Come diavolo fa passare l'oggetto filmato per il metodo POST sopra ?! Quando osservo lato client c'è
<form action = "/Movie/Edit/1" ... />
Qui non capisco il motivo per cui l'azione = URL della stessa pagina di visualizzazione?! 1 anche sul lato server non è solo Html.BeginForm() :( Come ci si rende conto di quello che metodo di azione per inviare e quali parametri percorso per passare? funziona, solo che non so perché
Giocare con le sostituzioni per '@ Html.BeginForm' - Ho fornito' Html.BeginForm ("Modifica", "Film", FormMethod.Post) '. Si noti che non ho fornito la terza parte 'id' del percorso. Eppure nel markup risultante, è lì: '/ Movies/Edit/4'. Come fa questo? Se suppongo 'Html.BeginForm (" Elimina "," Film ", FormMethod.Post)', l'HTML risultante non ha l'id ':'/Movies/Delete'. – mmcrae