2012-08-31 4 views
6

recientemente nos pasaron un .NET MVC 3 4 existente proyecto para .NET 4.5 y MVC 4.Cómo evitar cambios de última hora de MVC4 en cómo se hace Bools en una vista

donde tuvimos este tipo de cosas en una Ver:

@Model.MyBool 
<input type="hidden" name="foo" value="@Model.MyBool" /> 

que utiliza para representar como:

True 
<input type="hidden" name="foo" value="True" /> 

o:

False 
<input type="hidden" name="foo" value="False" /> 

Pero ahora se renderiza como:

True 
<input type="hidden" name="foo" value="value" /> 

o:

False 
<input type="hidden" name="foo" /> 

Es decir, que una propiedad booleana se representan en la vista como el valor del atributo de valor de un campo oculto, que doesn' t se representa como True o False (como lo hace en cualquier otro lugar), pero se representa como value, o se pierde por completo el atributo.

dos preguntas:

  1. WTF?
  2. ¿Hay alguna manera fácil y fácil de solucionar la multitud de lugares que esto ha roto mi aplicación? Es una gran aplicación y no me gusta navegar a través de cada vista para tratar de identificar todos los lugares donde coloco un bool en un campo de entrada.

Respuesta

3

WTF?

Razor 2 conditional attributes

¿Hay una manera fácil de bueno que puedo fijar la multitud de lugares que esto ha roto mi solicitud?

Ninguno que se me ocurra (es por eso que deberías haber usado @Html.Hidden("foo", Model.MyBool)). Mi mejor opción sería usar algo como Reemplazo estructurado de Resharper.

+0

vergüenza. Solía ​​no usar 'Html.Hidden (...)' porque no quería un 'id' en mis escondites (hay muchas instancias de la misma Vista parcial en la misma página). Y la forma en que lo escribí lo hizo para un código más legible, en mi humilde opinión. Bueno, esa es mi excusa de todos modos. Gracias. – teedyay

+0

@teedyay ¿qué tiene de malo tener un 'id' en cada escondido? –

+0

Debido a que tuve muchas instancias de la misma vista parcial, eso me hubiera dado muchos elementos con el mismo 'id', lo cual no es agradable. – teedyay

2

parece que esto está funcionando:

<input type="hidden" name="foo" value="@Model.MyBool.ToString()" /> 
+0

Sí, esa es la manera de arreglar una instancia. Esperaba que hubiera una forma de cambiar el comportamiento para el sitio completo, así que no tuve que buscar en todas las vistas para encontrar todo lo que necesitaba para cambiar esto. Desafortunadamente, no encontré ninguno. – teedyay

Cuestiones relacionadas