2011-04-21 18 views
7

He encontrado un escenario extraño que impide un bool? se publica de nuevo en el controlador correctamente. Es un problema muy específico, así que sigue los pasos para recrear.ASP.Net MVC3 error de enlace modelo

La aplicación debe implementarse como una carpeta virtual en IIS para que en lugar de/Inicio/Probar la URL sea/Virtual/Home/Test.

Inicio Controlador:

[HttpGet] 
public ActionResult Test(int? temp, bool? testBool) 
{ 
    return View(testBool); 
} 

/Inicio/Vista de pruebas (cshtml Razor):

@model bool? 
@{ 
    ViewBag.Title = "Test"; 
} 

@using (Html.BeginForm("Test", "Home", FormMethod.Get)) 
{ 
    @Html.CheckBox("testBool", Model ?? false, new { onchange = "this.form.submit();" }) 
    @Html.Label(Model == true ? "True" : "False") 
} 

En el segundo palo bool? no llega al controlador debido a la int? antes en la lista de parámetros. Esto se puede resolver poniendo el bool? antes de la int? en la lista de parámetros, pero obviamente no deberías tener que hacer esto. También funciona bien si no está en una carpeta virtual en IIS. ¿Existe el mismo problema si también se usa un método POST aunque se publica un bool en lugar de un bool? funciona, pero no es necesario si no está en una carpeta virtual, por lo que no debería tener que hacer esto tampoco.

¿Alguien más ha experimentado esto y hay algo que explique por qué el enlace falla o es solo un error en MVC3?

Si solo se trata de un error, ¿alguien sabe cuáles son los canales ASP.Net MVC adecuados para enviar informes de fallas?

Actualización:

He encontrado que si usted tiene cualquier número de variables anulables en los parámetros de la acción, sólo el primero de ellos será siempre trabajar y todos los demás fallará a poblarse. Alguien sabe si esto es por diseño o un error?

Respuesta

1

Aparentemente, este sigue siendo un problema. Pensé que ya habría sido arreglado. Una forma de evitar este error en particular es agregar esto a su método Application_Start.

ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider(); 

Adición que permitirá parámetros anulables a comportarse adecuadamente. Me sorprende que este error todavía exista ya que se conocía como RC2 en diciembre.

La diferencia entre los parámetros opcionales de ruta en el artículo de haacked es que, en su ejemplo, el enrutamiento no es el problema. En este caso, está publicando datos (o querystring) y no está completando correctamente sus parámetros de acciones que aceptan nulos. He comprobado el origen de mvc3 y no veo por qué esto debería ser un problema, ya que la depuración parece funcionar correctamente y recorrer los resultados fuente en el comportamiento esperado. Estoy bastante seguro de que esto no ha sido resuelto, aunque Scott Guthrie dijo que debería serlo ahora ...

+0

¡Eso funcionó! Excelente. Acaba de agregar la línea que indicó al método Application_Start en Global.asax.cs, tal como se indica. Empezaba a preocuparme que nadie tuviera la respuesta a esta. Esperemos que el error pueda ser resuelto por el equipo de MVC en una futura actualización. Gracias por tu ayuda. –

+0

Impresionante, @Chris. Me alegro que funcionó para usted. Curiosamente, funciona cuando se realiza una depuración local, lo que me hace preguntarme qué versión he instalado en mi servidor de prueba ...:) – Buildstarted

+0

Quizás tengas una versión más nueva de MVC3 que yo. Tendré que verificar si hay una versión más nueva disponible. ¿Lo tenía definitivamente en un directorio virtual como/Virtual/Home/Test? Hay bastantes bits si, si no se hace correctamente, hará que funcione, todo lo cual detallé en mi publicación. –

3

This artículo puede ser útil para usted.

+0

Es un error similar y puede estar relacionado. Desafortunadamente, el error y la solución están relacionados con valores de ruta opcionales consecutivos, mientras que mi problema es con los parámetros en la URL después de? –

+0

(+1) Dejé una publicación en el artículo que vinculó para ver si también puede obtener comentarios. –

Cuestiones relacionadas