Tengo un controlador MVC que tiene este método de acción:
[HttpPost]
public ActionResult SubmitAction()
{
// Get Post Params Here
... return something ...
}
El formulario es un formulario no trivial con un cuadro de texto simple.
Pregunta
¿Cómo accedo a los valores de los parámetros?
No estoy publicando desde una Vista, la publicación llega externamente. Supongo que hay una colección de pares clave / valor a los que tengo acceso.
Lo intenté Request.Params.Get("simpleTextBox");
pero me devuelve el error "Lo sentimos, se produjo un error al procesar su solicitud".
asp.net
asp.net-mvc-3
http-post
Ricardo
fuente
fuente
Simplemente, puede usar
FormCollection
como:También puede usar una clase, que está asignada con valores de formulario, y el motor asp.net mvc la llena automáticamente:
fuente
Las respuestas son muy buenas, pero hay otra forma en la última versión de MVC y .NET que realmente me gusta usar, en lugar de las claves FormCollection y Request de la "vieja escuela".
Considere un fragmento de HTML contenido en una etiqueta de formulario que hace un AJAX o un FORM POST.
Su controlador analizará los datos del formulario e intentará entregárselos como parámetros del tipo definido. Incluí una casilla de verificación porque es complicada. Devuelve el texto "on" si está marcado y nulo si no está marcado. Sin embargo, el requisito es que estas variables definidas DEBEN existir (a menos que sean anulables (recuerde que
string
es anulable)) de lo contrario, el AJAX o POST back fallará.También puede publicar un modelo sin usar ayudantes de afeitado. Me he encontrado con que esto es necesario algunas veces.
El marcado HTML simplemente será ...
y su controlador (Razor Engine) interceptará la variable de formulario "variableName" (el nombre es el que desee pero lo mantendrá consistente) e intentará construirlo y convertirlo en MyModel.
Cuando un controlador espera un modelo (en este caso, HomeModel), no tiene que definir TODOS los campos, ya que el analizador simplemente los dejará por defecto, generalmente NULL. Lo bueno es que puede mezclar y combinar varios modelos en el Mark-up y el análisis posterior se completará tanto como sea posible. No es necesario definir un modelo en la página ni utilizar ayudantes.
El uso
List<>
es un poco más complejo en su marcado.El índice en la Lista <> DEBE ser siempre secuencial y basado en cero. 0,1,2,3.
Se utiliza
IEnumerable<>
para la devolución de índices no secuenciales y basados en cero. Necesitamos agregar una entrada oculta adicional para ayudar a la carpeta.Y el código solo necesita usar IEnumerable y llamar
ToList()
Se recomienda utilizar un solo modelo o un modelo de vista (modelo que contiene otros modelos para crear un modelo de 'vista' complejo) por página. Mezclar y combinar como se propone podría considerarse una mala práctica, pero siempre que funcione y sea legible, no es MALA. Sin embargo, demuestra el poder y la flexibilidad del motor Razor.
Entonces, si necesita agregar algo arbitrario o anular otro valor de un asistente de Razor, o simplemente no tiene ganas de crear sus propios ayudantes, para un solo formulario que usa una combinación inusual de datos, puede usar rápidamente estos métodos para aceptar más datos.
fuente
Si desea obtener los datos del formulario directamente de la solicitud Http, sin ningún enlace de modelo o
FormCollection
puede usar esto:fuente
Request
e inyectarlo al método.