Відповіді:
Він створює приховану інформацію у формі для поля (від вашої моделі), яке ви передаєте.
Корисно для полів у вашій моделі / ViewModel, які вам потрібно зберегти на сторінці та пропустити назад при черговому дзвінку, але користувач не повинен їх бачити.
Розглянемо наступний клас 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>
І щоб споживати прихований вхідний код назад у вашому методі редагування дій:
[HttpPost]
public ActionResult Edit(FormCollection collection)
{
ViewModel.ID = Convert.ToInt32(collection["ID"]);
}
Як і багато функцій, цю можна використовувати різними способами для вирішення багатьох різних проблем, я вважаю це ще одним інструментом в наших інструментальних ременів.
Поки що дискусія була зосереджена на простому прихованні ідентифікатора, але це лише одне значення, чому б не використовувати його для безлічі значень! Це те, що я роблю, я використовую це для завантаження значень у класі лише одного перегляду за один раз, тому що html.beginform створює новий об'єкт, і якщо ваш модельний об'єкт для цього перегляду вже мав деякі значення, передані йому Значення будуть втрачені, якщо ви не посилаєтесь на ці значення у формі запуску.
Щоб побачити відмінну мотивацію html.hiddenfor, я рекомендую переглянути розділ Передача даних з представлення на контролер у .NET MVC - "@model" не виділяється
Використання коду Razor @ Html.Hidden або @ Html.HiddenFor аналогічно наступному коду Html
<input type="hidden"/>
А також перейдіть за наступним посиланням