La mayoría de los métodos de ayuda de MVC tienen una variante XXXFor. Están destinados a ser utilizados en conjunto con una clase de modelo concreto. La idea es permitir que el ayudante obtenga el atributo de "nombre" apropiado para el control de entrada de formulario basado en la propiedad que especifique en el lambda. Esto significa que puede eliminar "cadenas mágicas" que de otro modo tendría que emplear para correlacionar las propiedades del modelo con sus vistas. Por ejemplo:
Html.Hidden("Name", "Value")
resultará en:
<input id="Name" name="Name" type="hidden" value="Value">
En su controlador, puede que tenga una acción como:
[HttpPost]
public ActionResult MyAction(MyModel model)
{
}
Y un modelo como:
public class MyModel
{
public string Name { get; set; }
}
El crudo Html.Hidden
usamos d arriba se correlacionará con la propiedad Name
en el modelo. Sin embargo, es un poco desagradable que el valor "Nombre" para la propiedad debe especificarse utilizando una cadena ("Nombre"). Si cambia el nombre de la propiedad Name
en el Modelo, su código se romperá y el error será un tanto difícil de resolver. Por otra parte, si se utiliza HiddenFor
, se obtiene protegido de que:
Html.HiddenFor(x => x.Name, "Value");
Ahora, si cambia el nombre de la propiedad Name
, aparecerá un error de ejecución explícita que indica que la propiedad no se puede encontrar. Además, obtiene otros beneficios del análisis estático, como obtener un menú desplegable de los miembros después de escribir x.
.
Gracias Kirk, buena información sobre lo que sucede en el controlador y el modelo también. –
En realidad, obtiene un error COMPILADOR, no un error RUNTIME si cambia el nombre de la propiedad. Ese es el punto, fallar en la compilación, no ejecutar. –
@Mystere Man, las vistas generalmente no se compilan (cuando construyes tu solución). [Es un paso manual] (http://stackoverflow.com/questions/383192/compile-views-in-asp-net-mvc) para que VS los compile por usted. –