Что делает Html.HiddenFor? - PullRequest
       12

Что делает Html.HiddenFor?

101 голосов
/ 05 октября 2010

Хотя я прочитал документацию по Html.HiddenFor, я не понял, для чего он используется ...

Может ли кто-нибудь объяснить его использование и привести короткий пример?

Куда эти помощники должны идти в коде?

Ответы [ 4 ]

110 голосов
/ 05 октября 2010

Создает скрытый ввод в форму для поля (из вашей модели), которое вы передаете.

Это полезно для полей в вашей модели / модели представления, которые необходимо сохранить на странице и иметьпередается обратно, когда сделан другой вызов, но пользователь не должен видеть его.

Рассмотрим следующий класс 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>
8 голосов
/ 04 марта 2011

И для использования скрытого ввода идентификатора обратно в метод действия Edit:

[HttpPost]
public ActionResult Edit(FormCollection collection)
{
    ViewModel.ID = Convert.ToInt32(collection["ID"]);
}
2 голосов
/ 28 июня 2017

Подобно многим функциям, эта функция может использоваться различными способами для решения множества различных проблем, я считаю ее еще одним инструментом в наших инструментальных наборах.

Пока что обсуждение было сосредоточено на простом сокрытии идентификатора, но это только одно значение, почему бы не использовать его для большого количества значений! Это то, что я делаю, я использую его для загрузки значений в классе только по одному представлению за раз, потому что html.beginform создает новый объект, и если объект вашей модели для этого представления уже передал ему некоторые значения, эти значения будут потеряны, если вы не предоставите ссылку на эти значения в форме начала.

Чтобы увидеть отличную мотивацию для html.hiddenfor, я рекомендую посмотреть Передача данных из представления в контроллер в .NET MVC - "@model" не выделяет

0 голосов
/ 04 января 2017

Использование кода Razor @ Html.Hidden или @ Html.HiddenFor аналогично следующему HTML-коду

 <input type="hidden"/>

А также см. Следующую ссылку

https://msdn.microsoft.com/en-us/library/system.web.mvc.html.inputextensions.hiddenfor(v=vs.118).aspx

...