Per questo è possibile utilizzare un EditorTemplates. L'esempio seguente mostra il normale esempio di pubblicazione di moduli. Puoi azzerarlo se necessario utilizzando il metodo serialize
e inviando i valori del modulo.
Assumendo È necessario modificare l'elenco dei nomi degli studenti per un corso. Così Creiamo alcuni ViewModels per quella
public class Course
{
public int ID { set;get;}
public string CourseName { set;get;}
public List<Student> Students { set;get;}
public Course()
{
Students=new List<Student>();
}
}
public class Student
{
public int ID { set;get;}
public string FirstName { set;get;}
}
Ora nel tuo metodo di azione GET
, si crea un oggetto del nostro modello di vista, inizializzare la raccolta Students
e inviarlo al nostro punto di vista fortemente tipizzato.
public ActionResult StudentList()
{
Course courseVM=new Course();
courseVM.CourseName="Some course from your DB here";
//Hard coded for demo. You may replace this with DB data.
courseVM.Students.Add(new Student { ID=1, FirstName="Jon" });
courseVM.Students.Add(new Student { ID=2, FirstName="Scott" });
return View(courseVM);
}
Ora create una cartella chiamata EditorTemplates sotto Visite/YourControllerName. Quindi creare una nuova vista sotto quel chiamato Student.cshtml
con tenore di
@model Student
@{
Layout = null;
}
<tr>
<td>
@Html.HiddenFor(x => x.ID)
@Html.TextBoxFor(x => x.FirstName) </td>
</tr>
Ora a nostro avviso principale (StudentList.cshtml), metodo di supporto Usa EditorTemplate HTML per portare questo punto di vista.
@model Course
<h2>@Model.CourseName</h2>
@using(Html.BeginForm())
{
<table>
@Html.EditorFor(x=>x.Students)
</table>
<input type="submit" id="btnSave" />
}
Questo porterà tutta l'interfaccia utente con ciascuno dei nomi degli studenti in una casella di testo contenuta in una riga della tabella. Ora, quando il modulo viene pubblicato, il binding del modello MVC avrà tutto il valore della casella di testo nella proprietà Students
del nostro modello viewmodel.
[HttpPost]
public ActionResult StudentList(Course model)
{
//check for model.Students collection for each student name.
//Save and redirect. (PRG pattern)
}
soluzione Ajaxified
Se volete Ajaxify questo, si può ascoltare il pulsante di invio clic, ottenere la forma e serializzare e inviare allo stesso metodo di azione posta. Invece di reindirizzare dopo il salvataggio, è possibile restituire alcuni JSON che indicano lo stato dell'operazione.
$(function(){
$("#btnSave").click(function(e){
e.preventDefault(); //prevent default form submit behaviour
$.post("@Url.Action("StudentList",YourcontrollerName")",
$(this).closest("form").serialize(),function(response){
//do something with the response from the action method
});
});
});
Stai cercando un modello postback o ajax per l'invio di aggiornamenti? – Heather
Immagino che avrei cercato il più semplice in questo momento ... mentre sto imparando MVC4. Supponendo che sarebbe postback. Ma posso lavorare con entrambi i modelli. grazie – dan27