Хотя я прочитал документацию по Html.HiddenFor, я не понял, что он использует для ...Что делает Html.HiddenFor?
Может ли кто-нибудь объяснить его использование и дать короткий пример?
Где эти помощники должны войти в код?
Хотя я прочитал документацию по Html.HiddenFor, я не понял, что он использует для ...Что делает Html.HiddenFor?
Может ли кто-нибудь объяснить его использование и дать короткий пример?
Где эти помощники должны войти в код?
Он создает скрытый ввод в форме для поля (из вашей модели), который вы передаете.
Полезно для полей в модели/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>
И для использования скрытого ввода ID в вашем методе действия редактирования:
[HttpPost]
public ActionResult Edit(FormCollection collection)
{
ViewModel.ID = Convert.ToInt32(collection["ID"]);
}
Хотя это технически верно, вам не нужно это делать, если форма строго типизирована для модели представления. Вы должны иметь возможность напрямую обращаться к модели, что избавляет от необходимости делать какие-либо преобразования. – Yetti
@Yetti: Неверно. Существует веская причина, что механизм лесов поднимает поле идентификатора. Удалите его из одного из моих уроков и используйте Fiddler, чтобы увидеть, что это не в теле сообщения. – RickAndMSFT
Я не уверен, как комментарий неверен. Если модель является свойством * For() * 'd в представлении, метод контроллера должен быть строго типизирован и автоматически заполнен ModelBinder. –
Использование Razor кода @ Html.Hidden или @ Html.HiddenFor похож на следующий код Html
<input type="hidden"/>
А также сослаться на следующую ссылку
Подобно множеству функций, это можно использовать разными способами для решения многих разных проблем, я думаю, что это еще один инструмент в наших инструментальных сетях.
До сих пор обсуждение было сосредоточено на простое скрытие идентификатора, но это только одно значение, почему бы не использовать его для множества ценностей! Это то, что я делаю, я использую его для загрузки значений в классе только по одному виду за раз, потому что html.beginform создает новый объект, и если ваш объект модели для этой точки зрения уже имел некоторые значения, переданные ему, эти значения будут потеряны, если вы не предоставите ссылку на эти значения в beginform.
Чтобы увидеть большую мотивацию для html.hiddenfor, я рекомендую вам посмотреть Passing data from a View to a Controller in .NET MVC - "@model" not highlighting
Где следует, что помощник идти в коде? – JPCF
<% = Html.HiddenFor (model.Id)%>
в своем примере выше –
Я бы сказал «увиденный» пользователем. Пользователи могут «изменять» все, что они хотят, скрытые или нет. –