Comment transmettre des valeurs par la POSTE ASP.NET MVC 4
J'ai un problème avec la transmission de valeurs par la POSTE ASP.NET MVC 4
C'est mon action de l'Utilisateur contrôleur:
[HttpPost]
public string Show(int? uid, string uname)
{
return uname + uid.ToString();
}
Et c'est ainsi que j'ai essayé de transmettre des valeurs en vue:
@using (Html.BeginForm("Show", "User"))
{
Html.Hidden("uid", Model.Id);
Html.Hidden("uname", Model.UserName);
<input type="submit" value="+"/>
}
html:
<form action="/User/Show" method="post"> <input type="submit" value="+"/> </form>
et:
@using(Html.BeginForm("Show", "User", FormMethod.Post, new { uid = 1, uname = "user1" }))
{
<input type="submit" value="+"/>
}
html:
<form action="/User/Show" method="post" uid="1" uname="user1"> <input type="submit" value="+"/></form>
Dans les deux sens de l'action reçoit la valeur null à la place des valeurs réelles.
Est-il possible que les valeurs du Modèle.L'Id et le Modèle.Le nom d'utilisateur est effectivement nulle? Pouvez-vous copier-coller votre code source HTML de votre formulaire, que le rendu dans le navigateur? Probablement peu probable, mais juste pour vérifier.
C'est impossible parce que j'ai aussi essayé avec codé en dur variables.
Je suis confus. Je ne vois pas caché champs de saisie. Aussi, pouvez-vous ajouter votre source pour le corps principal de votre question.
Si vous le savez, vous ne pouvez pas ajouter des attributs à la
C'est impossible parce que j'ai aussi essayé avec codé en dur variables.
<form action="/User/Show" method="post"> <input type="submit" value="+"/>
</form><form action="/User/Show" method="post" uid="1" uname="user1"> <input type="submit" value="+"/>
Je suis confus. Je ne vois pas caché champs de saisie. Aussi, pouvez-vous ajouter votre source pour le corps principal de votre question.
Si vous le savez, vous ne pouvez pas ajouter des attributs à la
<form>
balise comme ça, la bonne méthode est <input type="hidden" name="uid" value="1" />
etc
OriginalL'auteur user3321042 | 2014-02-17
Vous devez vous connecter pour publier un commentaire.
Votre HtmlHelpers ne sont pas rendus. Utilisez la syntaxe Razor.
Explication:
Appel
Html.Hidden
(ouHtml.[anything]
) est une méthode et retourne unIHtmlString
. Sans l'aide de@
en face, le moteur ne sait pas que vous êtes en train à la sortie de la chaîne de retour. Il pense simplement que vous êtes à l'appel d'une méthode.OriginalL'auteur Rowan Freeman
Ce n'est pas une bonne approche pour une action qui reçoit les données
. Cette approche peut offrir de nombreuses failles de sécurité, comme l'injection de données., essentiellement beaucoup de champs.La bonne chose est de créer un Modèle (ou un ViewModel, si vous ne voulez pas conserver les données) pour obtenir la bonne orientation entre la Vue et le Contrôleur:
ViewModel:
Vue:
Contrôleur:
Bon. Je vais mettre à jour la réponse. Merci pour l'astuce.
OriginalL'auteur Cigano Morrison Mendez
Vous n'êtes pas en train de créer des champs cachés dans votre formulaire. Vous avez besoin d'un @ devant vous Caché d'aide et de chute de la semi-virgule à la fin.
La raison de votre codée en dur de test n'a pas fonctionné, c'est que votre code HTML n'était pas correct. Vous ne pouvez pas simplement mettre les valeurs que vous souhaitez afficher sur la
<form>
élément, vous avez besoin de les avoir aussi caché des champs dans le formulaire.OriginalL'auteur Craig W.
Il serait mieux si vous pouvez utiliser un modèle de vue.
(Codés dans le bloc-notes, donc pas testé, mais devrait fonctionner.)
OriginalL'auteur shenku