Respostas:
Ele cria uma entrada oculta no formulário para o campo (do seu modelo) que você passa.
É útil para campos em seu Model / ViewModel que você precisa para persistir na página e que foram devolvidos quando outra chamada é feita, mas não deveriam ser vistos pelo usuário.
Considere a seguinte classe ViewModel:
public class ViewModel
{
public string Value { get; set; }
public int Id { get; set; }
}
Agora você deseja que a página de edição armazene o ID, mas não seja visto:
<% using(Html.BeginForm() { %>
<%= Html.HiddenFor(model.Id) %><br />
<%= Html.TextBoxFor(model.Value) %>
<% } %>
Isso resulta no equivalente ao seguinte HTML:
<form name="form1">
<input type="hidden" name="Id">2</input>
<input type="text" name="Value" value="Some Text" />
</form>
E para consumir a entrada de ID oculta de volta em seu método de ação Editar:
[HttpPost]
public ActionResult Edit(FormCollection collection)
{
ViewModel.ID = Convert.ToInt32(collection["ID"]);
}
Como muitas funções, esta pode ser usada de muitas maneiras diferentes para resolver muitos problemas diferentes. Eu penso nela como mais uma ferramenta em nossos cintos de ferramentas.
Até agora, a discussão se concentrou fortemente em simplesmente ocultar um ID, mas esse é apenas um valor, por que não usá-lo para muitos valores! Isso é o que estou fazendo, eu o uso para carregar os valores em uma classe apenas uma visão por vez, porque html.beginform cria um novo objeto e se seu objeto de modelo para essa visão já teve alguns valores passados para ele, aqueles os valores serão perdidos, a menos que você forneça uma referência a esses valores no formulário inicial.
Para ver uma grande motivação para o html.hiddenfor, recomendo que você consulte Passando dados de uma visualização para um controlador em .NET MVC - "@model" sem destaque
O uso do código Razor @ Html.Hidden ou @ Html.HiddenFor é semelhante ao seguinte código Html
<input type="hidden"/>
E também consulte o seguinte link