J'ai un contrôleur MVC qui a cette méthode d'action:
[HttpPost]
public ActionResult SubmitAction()
{
// Get Post Params Here
... return something ...
}
Le formulaire est un formulaire non trivial avec une simple zone de texte.
Question
Comment accéder aux valeurs des paramètres?
Je ne publie pas à partir d'une vue, le message vient de l'extérieur. Je suppose qu'il existe une collection de paires clé / valeur auxquelles j'ai accès.
J'ai essayé Request.Params.Get("simpleTextBox");
mais cela renvoie l'erreur "Désolé, une erreur s'est produite lors du traitement de votre demande.".
asp.net
asp.net-mvc-3
http-post
Richard
la source
la source
Simplement, vous pouvez utiliser
FormCollection
comme:Vous pouvez également utiliser une classe, qui est mappée avec des valeurs de formulaire, et le moteur asp.net mvc la remplit automatiquement:
la source
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.
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.Vous pouvez également publier un modèle sans utiliser d'aides de rasoir. J'ai découvert que cela était parfois nécessaire.
Le balisage HTML sera simplement ...
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.
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.
L'utilisation
List<>
est un peu plus complexe dans son balisage.L'index sur la liste <> DOIT toujours être basé sur zéro et séquentiel. 0,1,2,3.
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.Et le code doit juste utiliser IEnumerable et appeler
ToList()
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.
la source
Si vous souhaitez obtenir les données du formulaire directement à partir de la requête Http, sans aucune liaison de modèle ou
FormCollection
vous pouvez utiliser ceci:la source
Request
et l'injecter dans la méthode.