Ответы:
Он создает скрытый ввод в форме для поля (из вашей модели), которое вы ему передаете.
Это полезно для полей в вашей модели / модели представления, которые вам нужно сохранить на странице и передать обратно, когда выполняется другой вызов, но не должны быть видны пользователю.
Рассмотрим следующий класс ViewModel:
public class ViewModel
{
public string Value { get; set; }
public int Id { get; set; }
}
Теперь вы хотите, чтобы страница редактирования сохраняла идентификатор, но не отображала его:
<% using(Html.BeginForm() { %>
<%= Html.HiddenFor(model.Id) %><br />
<%= Html.TextBoxFor(model.Value) %>
<% } %>
В результате получается эквивалент следующего HTML:
<form name="form1">
<input type="hidden" name="Id">2</input>
<input type="text" name="Value" value="Some Text" />
</form>
И чтобы использовать ввод скрытого идентификатора обратно в метод действия Edit:
[HttpPost]
public ActionResult Edit(FormCollection collection)
{
ViewModel.ID = Convert.ToInt32(collection["ID"]);
}
Как и многие другие функции, эту можно использовать по-разному для решения множества различных проблем, я считаю ее еще одним инструментом в нашем наборе инструментов.
До сих пор обсуждение было сосредоточено на простом сокрытии идентификатора, но это только одно значение, почему бы не использовать его для множества значений! Это то, что я делаю, я использую его для загрузки значений в классе только по одному представлению за раз, потому что html.beginform создает новый объект, и если ваш объект модели для этого представления уже имел некоторые значения, переданные ему, эти значения будут потеряны, если вы не укажете ссылку на эти значения в beginform.
Чтобы увидеть большую мотивацию для html.hiddenfor, я рекомендую вам увидеть « Передача данных из представления в контроллер в .NET MVC» - «@model» не выделяется
Использование кода Razor @ Html.Hidden или @ Html.HiddenFor похоже на следующий код HTML.
<input type="hidden"/>
А также обратитесь по следующей ссылке