Respuestas:
Crea una entrada oculta en el formulario para el campo (de su modelo) que lo pasa.
Es útil para los campos de su modelo / modelo de vista que necesita para persistir en la página y haber pasado cuando se realiza otra llamada, pero el usuario no debería verlos.
Considere la siguiente clase ViewModel:
public class ViewModel
{
public string Value { get; set; }
public int Id { get; set; }
}
Ahora desea que la página de edición almacene la ID pero no se vea:
<% using(Html.BeginForm() { %>
<%= Html.HiddenFor(model.Id) %><br />
<%= Html.TextBoxFor(model.Value) %>
<% } %>
Esto da como resultado el equivalente al siguiente HTML:
<form name="form1">
<input type="hidden" name="Id">2</input>
<input type="text" name="Value" value="Some Text" />
</form>
Y para volver a consumir la entrada de ID oculta en su método de acción Editar:
[HttpPost]
public ActionResult Edit(FormCollection collection)
{
ViewModel.ID = Convert.ToInt32(collection["ID"]);
}
Como muchas funciones, esta se puede usar de muchas formas diferentes para resolver muchos problemas diferentes, creo que es una herramienta más en nuestros cinturones de herramientas.
Hasta ahora, la discusión se ha centrado en gran medida en simplemente ocultar una identificación, pero ese es solo un valor, ¿por qué no usarlo para muchos valores? Eso es lo que estoy haciendo, lo uso para cargar los valores en una clase solo una vista a la vez, porque html.beginform crea un nuevo objeto y si su objeto modelo para esa vista ya tenía algunos valores pasados, esos los valores se perderán a menos que proporcione una referencia a esos valores en el formulario de inicio.
Para ver una gran motivación para html.hiddenfor, le recomiendo que vea Pasando datos de una vista a un controlador en .NET MVC - "@model" sin resaltar
El uso del código Razor @ Html.Hidden o @ Html.HiddenFor es similar al siguiente código Html
<input type="hidden"/>
Y también consulte el siguiente enlace