Odpowiedzi:
Tworzy ukryte dane wejściowe w formularzu dla pola (z Twojego modelu), które je przekazujesz.
Jest to przydatne w przypadku pól w Twoim modelu / modelu widoku, które musisz zachować na stronie i które zostały przekazane z powrotem, gdy wykonywane jest inne wywołanie, ale nie powinny być widoczne dla użytkownika.
Rozważmy następującą klasę ViewModel:
public class ViewModel
{
public string Value { get; set; }
public int Id { get; set; }
}
Teraz chcesz, aby strona edycji przechowywała identyfikator, ale czy nie jest on widoczny:
<% using(Html.BeginForm() { %>
<%= Html.HiddenFor(model.Id) %><br />
<%= Html.TextBoxFor(model.Value) %>
<% } %>
Powoduje to odpowiednik następującego kodu HTML:
<form name="form1">
<input type="hidden" name="Id">2</input>
<input type="text" name="Value" value="Some Text" />
</form>
Aby wykorzystać dane wejściowe ukrytego identyfikatora z powrotem w metodzie akcji Edit:
[HttpPost]
public ActionResult Edit(FormCollection collection)
{
ViewModel.ID = Convert.ToInt32(collection["ID"]);
}
Podobnie jak wiele funkcji, ta może być używana na wiele różnych sposobów do rozwiązywania wielu różnych problemów, myślę o niej jako o kolejnym narzędziu w naszych paskach narzędzi.
Do tej pory dyskusja skupiała się głównie na zwykłym ukrywaniu identyfikatora, ale to tylko jedna wartość, dlaczego nie użyć jej dla wielu wartości! To właśnie robię, używam go do ładowania wartości w klasie tylko w jednym widoku na raz, ponieważ html.beginform tworzy nowy obiekt i jeśli twój model dla tego widoku ma już przekazane wartości, te wartości zostaną utracone, chyba że podasz odniesienie do tych wartości w beginform.
Aby zobaczyć wielką motywację dla html.hiddenfor, polecam zobaczyć Przekazywanie danych z widoku do kontrolera w .NET MVC - "@model" nie wyróżnia się
Użycie kodu Razor @ Html.Hidden lub @ Html.HiddenFor jest podobne do następującego kodu HTML
<input type="hidden"/>
Zobacz także poniższy link