Les réponses sont très bonnes mais il y a une autre manière dans la dernière version de MVC et .NET que j'aime beaucoup utiliser, au lieu des clés FormCollection et Request "à l'ancienne".
Considérez un extrait de code HTML contenu dans une balise de formulaire qui fait un AJAX ou FORM POST.
<input type="hidden" name="TrackingID"
<input type="text" name="FirstName" id="firstnametext" />
<input type="checkbox" name="IsLegal" value="Do you accept terms and conditions?" />
Votre contrôleur analysera les données du formulaire et essaiera de vous les fournir en tant que paramètres du type défini. J'ai inclus une case à cocher car c'est une question délicate. Il renvoie le texte "on" si coché et nul si non coché. La condition est cependant que ces variables définies DOIVENT exister (à moins que nullable (rappelez-vous bien que ce string
soit nullable)) sinon le retour AJAX ou POST échouera.
[HttpPost]
public ActionResult PostBack(int TrackingID, string FirstName, string IsLegal){
MyData.SaveRequest(TrackingID,FirstName, IsLegal == null ? false : true);
}
Vous pouvez également publier un modèle sans utiliser d'aides de rasoir. J'ai découvert que cela était parfois nécessaire.
public Class HomeModel
{
public int HouseNumber { get; set; }
public string StreetAddress { get; set; }
}
Le balisage HTML sera simplement ...
<input type="text" name="variableName.HouseNumber" id="whateverid" >
et votre contrôleur (Razor Engine) interceptera la variable de formulaire "variableName" (le nom est comme vous le souhaitez mais gardez-le cohérent) et essaiera de le construire et de le convertir en MyModel.
[HttpPost]
public ActionResult PostBack(HomeModel variableName){
postBack.HouseNumber; //The value user entered
postBack.StreetAddress; //the default value of NULL.
}
Lorsqu'un contrôleur attend un modèle (dans ce cas HomeModel), vous n'avez pas à définir TOUS les champs car l'analyseur les laissera par défaut, généralement NULL. La bonne chose est que vous pouvez mélanger et assortir différents modèles sur le Mark-up et l'analyse de post-retour peuplera autant que possible. Vous n'avez pas besoin de définir un modèle sur la page ou d'utiliser des helpers.
ASTUCE: Le nom du paramètre dans le contrôleur est le nom défini dans le balisage HTML "name =" pas le nom du modèle mais le nom de la variable attendue dans le!
L'utilisation List<>
est un peu plus complexe dans son balisage.
<input type="text" name="variableNameHere[0].HouseNumber" id="id" value="0">
<input type="text" name="variableNameHere[1].HouseNumber" id="whateverid-x" value="1">
<input type="text" name="variableNameHere[2].HouseNumber" value="2">
<input type="text" name="variableNameHere[3].HouseNumber" id="whateverid22" value="3">
L'index sur la liste <> DOIT toujours être basé sur zéro et séquentiel. 0,1,2,3.
[HttpPost]
public ActionResult PostBack(List<HomeModel> variableNameHere){
int counter = MyHomes.Count()
foreach(var home in MyHomes)
{ ... }
}
Utilisation IEnumerable<>
pour les index non basés sur zéro et non séquentiels post back. Nous devons ajouter une entrée cachée supplémentaire pour aider le classeur.
<input type="hidden" name="variableNameHere.Index" value="278">
<input type="text" name="variableNameHere[278].HouseNumber" id="id" value="3">
<input type="hidden" name="variableNameHere.Index" value="99976">
<input type="text" name="variableNameHere[99976].HouseNumber" id="id3" value="4">
<input type="hidden" name="variableNameHere.Index" value="777">
<input type="text" name="variableNameHere[777].HouseNumber" id="id23" value="5">
Et le code doit juste utiliser IEnumerable et appeler ToList()
[HttpPost]
public ActionResult PostBack(IEnumerable<MyModel> variableNameHere){
int counter = variableNameHere.ToList().Count()
foreach(var home in variableNameHere)
{ ... }
}
Il est recommandé d'utiliser un seul modèle ou un modèle de vue (modèle contenant d'autres modèles pour créer un modèle de «vue» complexe) par page. Mélanger et assortir comme proposé pourrait être considéré comme une mauvaise pratique, mais tant que cela fonctionne et est lisible, ce n'est pas MAUVAIS. Il démontre cependant la puissance et la flexibilité du moteur Razor.
Donc, si vous avez besoin de supprimer quelque chose d'arbitraire ou de remplacer une autre valeur d'un assistant Razor, ou si vous n'avez tout simplement pas envie de créer vos propres assistants, pour un formulaire unique qui utilise une combinaison inhabituelle de données, vous pouvez rapidement utiliser ces méthodes pour accepter plus Les données.