2010-02-15 21 views
10

estoy publicando una acción simple.debe formcollection estar vacío en asp.net mvc solicitud GET

public void Login(FormCollection formCollection) 
{ 
    ... 
} 

Incluso con unos valores de cadena de consulta, la formcollection.Count es . ¿Es por comportamiento?

+2

Si su acción es realmente "simple", ¿por qué no declara argumentos de acción para cada variable que espera que se pase? El framework MVC vinculará automáticamente esas variables para usted, lo que significa que (1) funcionará independientemente de si la variable se pasa en la ruta, la URL o los datos del formulario, y (2) hace que su código sea mucho más fácil de leer , entender y probar. En la mayoría de los casos, pasar "FormCollection" a un argumento es un antipatrón y debe evitarse. –

+0

@Seth - ¿Qué pasa si el método es un controlador de solicitud ajax? En ese caso, prefiero devolver un Json adecuado (nuevo {success = false, errorMsg = "..."}) en lugar de la página de error de ASP.NET si el parámetro está mal formado o falta. –

Respuesta

12

FormCollection utiliza valores POST y no lo que está en la cadena de consulta. Su acción debería verse:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Login(FormCollection formCollection) 
{ 
    ... 
} 
+0

Gracias. Estoy tratando de evitar el objeto Request. – Adeel

+0

¿cómo se haría esto con http get? Quiero mantener los valores en la url para permitir que un usuario guarde los resultados de una búsqueda – Chev

+3

@Chev, usa 'Request [" paramName "]' con las solicitudes GET. –

Cuestiones relacionadas