J'ai un contrôleur pour afficher un modèle (utilisateur) et que vous souhaitez créer un écran juste avec un bouton pour activer. Je ne veux pas de champs dans le formulaire. J'ai déjà l'identifiant dans l'url. Comment puis-je accomplir cela?Comment créer un httppost obtenant les mêmes paramètres de httpget?
Répondre
Vous pouvez utiliser un champ caché à l'intérieur de la forme:
<% using (Html.BeginForm()) { %>
<%= Html.HiddenFor(x => x.Id) %>
<input type="submit" value="OK" />
<% } %>
ou passer dans l'action de la forme:
<% using (Html.BeginForm("index", "home",
new { id = RouteData.Values["id"] }, FormMethod.Post)) { %>
<input type="submit" value="OK" />
<% } %>
La meilleure façon pour une telle situation simple est de donner un nom pour soumettre le bouton et vérifier l'action si elle a de la valeur ou non. Si elle a la valeur, alors afficherons l'action, sinon, il susciter une réaction:
<% using (Html.BeginForm("index", "home",
new { id = RouteData.Values["id"] }, FormMethod.Post)) { %>
<input type="submit" value="OK" name="btnActivate" />
<% } %>
Pour Cs vous pouvez combiner des méthodes get et contrôleur de poste en un:
public ActionResult Index(int? id, string btnActivate)
{
if (!string.IsNullOrEmpty(btnActivate))
{
Activate(id.Value);
return RedirectToAction("NextAction");
}
return View();
}
Un peu en retard à la partie sur cela, mais j'ai trouvé une solution plus facile à ce que je pense est un cas d'utilisation assez courante lorsque vous invite GET (« êtes-vous sûr de vouloir bla bla bla? »), puis agir sur POST en utilisant la même argument (s).
La solution: utiliser paramètres optionnels. Pas besoin de champs cachés et autres.
Note: Je ne MVC3 dans ce testé.
public ActionResult ActivateUser(int id)
{
return View();
}
[HttpPost]
public ActionResult ActivateUser(int id, string unusedValue = "")
{
if (FunctionToActivateUserWorked(id))
{
RedirectToAction("NextAction");
}
return View();
}
Sur une note finale, vous ne pouvez pas utiliser string.Empty en place de ""
, car il doit être une constante de compilation. Et il est un excellent endroit pour mettre des commentaires drôles pour quelqu'un d'autre pour trouver :)
Mon approche est de ne pas ajouter un paramètre utilisé comme cela semble que ce serait une source de confusion, et est en pratique générale mauvaise. Au lieu de cela, ce que je fais est append « Post » à mon nom d'action:
public ActionResult UpdateUser(int id)
{
return View();
}
[HttpPost]
public ActionResult UpdateUserPost(int id)
{
// Do work here
RedirectToAction("ViewCustomer", new { customerID : id });
}
Utilisez [ActionName] attribut - cette façon, vous pouvez avoir les URL pointent apparemment au même endroit, mais effectuer des actions différentes en fonction de la méthode HTTP :
[ActionName("Index"), HttpGet]
public ActionResult IndexGet(int id) { ... }
[ActionName("Index"), HttpPost]
public ActionResult IndexPost(int id) { ... }
Sinon, vous pouvez vérifier la méthode HTTP dans le code:
public ActionResult Index(int id)
{
if (string.Equals(this.HttpContext.Request.HttpMethod, "POST", StringComparison.OrdinalIgnoreCase))
{ ... }
}
- 1. Android envoyer une photo en utilisant HttpPost/HttpGet
- 2. Comment gérer correctement une URL ayant deux fois les mêmes paramètres avec les mêmes valeurs?
- 3. Comment deux applications iPhone peuvent-elles partager les mêmes paramètres?
- 4. Comment ajouter des paramètres aux mêmes fonctions?
- 5. RegEx obtenant le script et les paramètres .. presque là
- 6. Deux jeux de données avec les mêmes paramètres dans SSRS
- 7. PartialView et de l'action HttpPost
- 8. Les mêmes paramètres des différents appels JNI ont-ils les mêmes valeurs?
- 9. Comment envoyer un cookie avec HttpGet en Java
- 10. Comment créer un fichier en obtenant le nom de fichier de l'utilisateur en javascript?
- 11. Les flèches obtenant les touches fléchées
- 12. HttpPost à ReturnURL après la redirection
- 13. lecture réponse HttpPost
- 14. Coder les paramètres utilisés dans un article
- 15. HttpPost ne fonctionne pas!
- 16. Créer un ISubDependencyResolver qui examine les attributs de propriétés/paramètres
- 17. Comment envoyer une image via HTTPPost?
- 18. Comment créer un bouton de réinitialisation dans l'iPhone Paramètres
- 19. Apache HttpClient 4.0-beta2 httppost, comment ajouter un referer?
- 20. Android HttpPost: comment obtenir le résultat
- 21. asp.net image sous une forme et HTTPPost
- 22. Comment créer le métamodèle pour plusieurs unités de persistance en utilisant les mêmes classes d'entités?
- 23. Comment regrouper les mêmes valeurs dans un tableau multidimention?
- 24. Comment puis-je créer plusieurs sites Web joomla avec les mêmes utilisateurs/mots de passe?
- 25. Ruby obtenant les éléments diagonaux dans un tableau 2d
- 26. Comment fusionner mutiple tables en un seul, avec les mêmes schémas et les noms de colonnes
- 27. Comment nous pouvons ajouter des mêmes paramètres pour tous les liens dans ma page webform
- 28. Créer de multiples relations dans les rails avec les mêmes types de données
- 29. ASP.Net MVC 2 est-il possible d'obtenir la même instance de modèle (avec de légères modifications) méthode HttpPost, qui a été adoptée dans HttpGet
- 30. VS2008: Définir les mêmes paramètres d'analyse de code pour une solution complète?
Mais je ne peux pas avoir httpost et HttpGet avec les mêmes paramets, pouvez-vous montrer l'échantillon pour .cs aussi? – waldecir
@waldecir, non, vous ne pouvez pas avoir deux actions de contrôleur avec les mêmes arguments. Vous devrez modifier les signatures de votre action GET ou POST. –
Oui, je sais. ma première page est un get avec id pour afficher les infos sur l'utilisateur, donc j'ai besoin d'un post pour activer/désactiver, comment serait l'appel httppost? – waldecir