Yanıtlar:
Geçtiğiniz alan için (modelinizden) form üzerinde gizli bir girdi oluşturur.
Model / ViewModel'inizdeki, sayfada kalmanız gereken ve başka bir arama yapıldığında geri dönmeniz gereken ancak kullanıcı tarafından görülmemesi gereken alanlar için kullanışlıdır.
Aşağıdaki ViewModel sınıfını göz önünde bulundurun:
public class ViewModel
{
public string Value { get; set; }
public int Id { get; set; }
}
Şimdi, düzenleme sayfasının kimliği saklamasını, ancak görünmemesini istiyorsunuz:
<% using(Html.BeginForm() { %>
<%= Html.HiddenFor(model.Id) %><br />
<%= Html.TextBoxFor(model.Value) %>
<% } %>
Bu, aşağıdaki HTML'nin eşdeğeriyle sonuçlanır:
<form name="form1">
<input type="hidden" name="Id">2</input>
<input type="text" name="Value" value="Some Text" />
</form>
Ve gizli kimlik girişini Düzenle eylem yönteminize geri almak için:
[HttpPost]
public ActionResult Edit(FormCollection collection)
{
ViewModel.ID = Convert.ToInt32(collection["ID"]);
}
Pek çok işlev gibi, bu da birçok farklı sorunu çözmek için birçok farklı şekilde kullanılabilir, bunu alet kemerlerimizdeki başka bir araç olarak düşünüyorum.
Şimdiye kadar, tartışma ağırlıklı olarak bir kimliği gizlemeye odaklandı, ancak bu yalnızca bir değer, neden onu birçok değer için kullanmayalım! Yaptığım şey bu, bir sınıftaki değerleri bir seferde yalnızca bir görünümde yüklemek için kullanıyorum, çünkü html.beginform yeni bir nesne oluşturuyor ve bu görünüm için model nesneniz zaten ona geçirilen bazı değerlere sahipse, bunlar başlangıç formunda bu değerlere bir referans sağlamazsanız değerler kaybolacaktır.
Html.hiddenfor için harika bir motivasyon görmek için, .NET MVC'de bir Görünümden Denetleyiciye veri aktarımı - "@model" seçeneğinin vurgulanmadığını görmenizi öneririm
Razor kodunun kullanımı @ Html.Hidden veya @ Html.HiddenFor, aşağıdaki Html koduna benzer
<input type="hidden"/>
Ve ayrıca aşağıdaki bağlantıya bakın