quello che disorienta di piu al passaggio da asp.net a mvc sono le richieste http specialmente quelle POST. Il motivo è che in asp.net tutto è una chiamata POST alla stessa pagina, tutta la pagina è racchiusa in un form (guarda una masterpage qualsiasi subito dopo il body) e viene usato in maniera trasparente javascript per fare in modo che ogni elemento della pagina possa lanciare la richiesta POST che lato server viene chiamata PostBack.
Il postback in mvc non esiste piu, in una pagina puoi avere quanti form vuoi che fanno richieste POST al server.
considera questo pezzo di pagina che rappresenta il tasto di eliminazione di un record
codice:
<form action="/clienti/elimina" method="post">
<input type="hidden" name="id" value"5" />
<input type="submit" value="Elimina" />
</form>
qui invii dei dati circostanziati al loro scopo, sai esattamente quale action viene richiamata (Elimina del controller Clienti) e cosa passi a quella action (un parametro di nome id il cui valore è 5).
la action sarà qualcosa tipo:
codice:
[HttpPost]
public void Elimina(int id)
{
//elimina il record
return RedirectToAction("Index");
}
Questa è la base. Se vuoi inviare dei form usando elementi di pagina che non siano i tasti submit devi usare javascript/jquery (è quello che fa asp.net per permettere a qualsiasi cosa di effettuare il postback: ci attacca un handler javascript).
es. uso il click di un tag anchor per inviare il form
codice:
<form action="/clienti/elimina" method="post">
<input type="hidden" name="id" value"5" />
Elimina
</form>
...
<script>
$(form a).click(function(e) {
e.preventDefault();
$(this).parent().submit();
});
</script>
è un esempio ma potresti scatenare il submit di un form con qualsiasi evento di qualsiasi elemento usando javascript/jquery.
P.S.
Il form di prima è puro html, in razor scriverai qualcosa tipo:
codice:
@using (Html.BeginForm("Elimina", "Clienti", FormMethod.Post))
{
@Html.HiddenFor(m => m.ID)
<input type="submit" value="Elimina" />
}