Tengo un controlador para mostrar un modelo (Usuario) y quiero crear una pantalla solo con un botón para activar. No quiero campos en el formulario. Ya tengo la identificación en la url. ¿Cómo puedo lograr esto?¿Cómo creo un httppost obteniendo los mismos parámetros de httpget?
Respuesta
Se puede usar un campo oculto en el interior de la forma:
<% using (Html.BeginForm()) { %>
<%= Html.HiddenFor(x => x.Id) %>
<input type="submit" value="OK" />
<% } %>
o pasarlo en la acción de la forma:
<% using (Html.BeginForm("index", "home",
new { id = RouteData.Values["id"] }, FormMethod.Post)) { %>
<input type="submit" value="OK" />
<% } %>
La forma más fácil para tal situación sencilla es dar un nombre para enviar el botón y verificar en acción si tiene valor o no. Si tiene el valor, entonces Publicación de la acción, si no, entonces Get acción:
<% using (Html.BeginForm("index", "home",
new { id = RouteData.Values["id"] }, FormMethod.Post)) { %>
<input type="submit" value="OK" name="btnActivate" />
<% } %>
para CS se puede combinar conseguir y controlador de post métodos en uno:
public ActionResult Index(int? id, string btnActivate)
{
if (!string.IsNullOrEmpty(btnActivate))
{
Activate(id.Value);
return RedirectToAction("NextAction");
}
return View();
}
Un poco tarde a la fiesta sobre esto, pero encontré una solución más fácil para lo que creo que es un caso de uso bastante común en el que indicaste en GET ("¿estás seguro de que quieres , bla, bla, bla,?") y luego actúas en POST usando mismo argumento (s).
La solución: use parámetros opcionales. No hay necesidad de ningún campo oculto y tal.
Nota: Solo probé esto en MVC3.
public ActionResult ActivateUser(int id)
{
return View();
}
[HttpPost]
public ActionResult ActivateUser(int id, string unusedValue = "")
{
if (FunctionToActivateUserWorked(id))
{
RedirectToAction("NextAction");
}
return View();
}
En una nota final, no se puede utilizar en lugar del String.Empty ""
porque debe ser una constante en tiempo de compilación. Y es un gran lugar para poner comentarios graciosos para que otros lo encuentren :)
Mi enfoque no es agregar un parámetro no utilizado, ya que parece que causaría confusión, y es en general una mala práctica. En su lugar, lo que hago es añadir "mensaje" a mi nombre de acción:
public ActionResult UpdateUser(int id)
{
return View();
}
[HttpPost]
public ActionResult UpdateUserPost(int id)
{
// Do work here
RedirectToAction("ViewCustomer", new { customerID : id });
}
Utilice [ActionName] atributo - de esta manera se puede tener las direcciones URL aparentemente apuntar a la misma ubicación, pero llevar a cabo diferentes acciones dependiendo del método HTTP :
[ActionName("Index"), HttpGet]
public ActionResult IndexGet(int id) { ... }
[ActionName("Index"), HttpPost]
public ActionResult IndexPost(int id) { ... }
Alternativamente se puede comprobar el método HTTP de código:
public ActionResult Index(int id)
{
if (string.Equals(this.HttpContext.Request.HttpMethod, "POST", StringComparison.OrdinalIgnoreCase))
{ ... }
}
- 1. asp.net mvc - [HttpPost/HttpGet] vs [AcceptVerbs (HttpVerbs.Post/Get)]
- 2. http_build_query con los mismos parámetros de nombre
- 3. Uso de HttpClient y HttpPost en Android con los parámetros de publicación
- 4. ASP.NET MVC 3: ¿Cómo forzar a un ActionLink a hacer un HttpPost en lugar de un HttpGet?
- 5. Para un método HttpGet, ¿qué son getParams()?
- 6. ¿Cómo creo una packaged_task con parámetros?
- 7. paso de un parámetro en un tornado HttpGet con varios parámetros
- 8. Obteniendo los parámetros de las cookies en PHP?
- 9. HttpPost to ReturnURL after redirect
- 10. respuesta de lectura HttpPost
- 11. ¿Cómo obtener los mismos valores de HashMap?
- 12. androide HTTPGet tema
- 13. ¿Cómo recuperar valores de formulario de HTTPPOST, diccionario o?
- 14. ¿HttpGet maneja las cookies automáticamente?
- 15. solicitud de autenticación con HTTPGet
- 16. Obteniendo el número de parámetros de bloque
- 17. GraphViz, agrupando los mismos bordes
- 18. ¿Cuál es la diferencia entre [AcceptVerbs (HttpVerbs.Post)] y [HttpPost]?
- 19. ¿Se permiten los mismos nombres de variables y parámetros en una función de JavaScript?
- 20. ¿Cómo pasar los parámetros de url a un iframe?
- 21. C#: Cuerdas con los mismos contenidos
- 22. Cómo enviar caracteres Unicode en un HttpPost en Android
- 23. Android HttpPost: cómo obtener el resultado
- 24. @ convertido a% 40 en HTTPPost solicitud
- 25. Cómo evitar los parámetros?
- 26. ¿Cómo creo un niño NSManagedObjectContext?
- 27. Cómo creo un Mailer Observer
- 28. Comprueba si dos elementos son los mismos
- 29. ¿Cómo creo un UIViewController programáticamente?
- 30. ¿Cómo obtener los parámetros de los componentes?
, pero no puedo tener httpost y HTTPGet con los mismos paramets, se puede mostrar la muestra de Cs también? – waldecir
@waldecir, no, no puede tener dos acciones de controlador con los mismos argumentos. Deberá modificar las firmas de su acción GET o POST. –
Sí, lo sé. mi primera página es un get id para mostrar las informaciones sobre el usuario, entonces necesito una publicación para activar/desactivar, ¿cómo sería la llamada de httppost? – waldecir