2009-05-21 30 views
7

he dado cuenta de lo Html.BeginForm() método codifica suministra routeValues ​​ en acción atributo de la etiqueta FORM. Esto funciona bien con el método POST. Pero si el método es OBTENER todos los parámetros en la acción URL son eliminados por el navegador (probado en IE8 y Firefox 3.0.7).Html.BeginForm pierde routeValues ​​con FormMethod.GET

Por ejemplo, este código en la vista

<% 
    using (Html.BeginForm("TestAction", "TestController", new { test = 123 }, 
     FormMethod.Get)) 
    { 
     Response.Write("<input type='submit'>"); 
    }; 
%> 

da como HTML

<form action="/TestController/TestAction?test=123" method="get"> 
    <input type='submit'> 
</form> 

Pero después de la presentación de la URL forma se convirtió en /TestController/TestAction no /TestController/TestAction? Test = 123 (el parámetro se pierde).

Ahora uso grupo de Html.Hidden() llamadas en lugar de routeValues ​​ parámetros pero estoy interesado hay otra solución? ¿Debería considerarse como un error en MVC que se solucionará en algún momento?

+0

¿Puedes aclarar tu problema? ¿Estás intentando enviar un formulario usando un GET en lugar de un POST? ¿Puede dar un ejemplo? –

Respuesta

7

Como puede ver, el HTML generado es "correcto" y tiene la semántica que desea, por lo que no se trata de un problema del lado del servidor, sino del lado del cliente. El navegador en este caso está quitando la parte de la consulta de la URL de acción, mientras que esperaba que se agregue a la consulta en su lugar. Si lee la especificación, se supone que la acción no debe contener una consulta (es un URI, no una URL), así que de hecho se topa con una "limitación" de la especificación HTTP.

Se le dirige a la URL desnuda sin consulta, porque en el HTML que tiene no hay nada que enviar. Intente dar un nombre y un valor al campo de envío, o agregue un campo oculto, verá que los parámetros se transmiten en la consulta.

Definitivamente debe usar campos ocultos en este caso.

+0

¿Por qué ASP.NET MVC HTML helper BeginForm() no representa los campos ocultos cuando se elige el método GET? –

+0

Como alternativa, cree una definición de ruta específica para que el valor de 'prueba' se agregue como un segmento de ruta en lugar de una cadena de consulta, en cuyo caso no necesita una entrada oculta –

Cuestiones relacionadas