Apa yang dilakukan Html.HiddenFor?

105

Meskipun saya telah membaca dokumentasi tentang Html.HiddenFor, saya belum memahami apa yang digunakan untuk ...

Bisakah seseorang menjelaskan kegunaannya dan memberikan contoh singkat?

Ke mana seharusnya para pembantu itu masuk dalam kode?

JPCF
sumber

Jawaban:

112

Ini menciptakan input tersembunyi pada formulir untuk bidang (dari model Anda) yang Anda berikan.

Berguna untuk kolom di Model / ViewModel yang perlu Anda pertahankan di halaman dan telah dikembalikan saat panggilan lain dilakukan tetapi tidak boleh dilihat oleh pengguna.

Pertimbangkan kelas ViewModel berikut:

public class ViewModel
{
    public string Value { get; set; }
    public int Id { get; set; }
}

Sekarang Anda ingin halaman edit menyimpan ID tetapi tidak terlihat:

<% using(Html.BeginForm() { %>
    <%= Html.HiddenFor(model.Id) %><br />
    <%= Html.TextBoxFor(model.Value) %>
<% } %>

Ini menghasilkan persamaan dari HTML berikut:

<form name="form1">
    <input type="hidden" name="Id">2</input>
    <input type="text" name="Value" value="Some Text" />
</form>
Justin Niessner
sumber
<% = Html.HiddenFor (model.Id)%> <br /> dalam contoh di atas
Bryce Fischer
11
Saya akan mengatakan "dilihat" oleh pengguna. Pengguna dapat "memodifikasi" apa pun yang mereka inginkan, tersembunyi atau tidak.
Craig Stuntz
@Craig - Anda benar. Saya sebenarnya berpikir saya mengubah kata-kata itu tetapi ternyata tidak.
Justin Niessner
Dan biasanya digunakan untuk ID (seperti pada contoh di atas), yang biasanya tidak ingin Anda tampilkan.
RickAndMSFT
Saya agak bingung karena model tampilan bukanlah parameter pengontrol. Jadi, mengapa nama input dibuat di bidang model tampilan?
Yohanes
8

Dan untuk menggunakan input ID tersembunyi kembali pada metode tindakan Edit Anda:

[HttpPost]
public ActionResult Edit(FormCollection collection)
{
    ViewModel.ID = Convert.ToInt32(collection["ID"]);
}
James Still
sumber
8
Meskipun secara teknis ini benar, Anda tidak perlu melakukan ini jika formulir diketik dengan kuat ke model tampilan. Anda harus dapat mengakses model secara langsung, sehingga tidak perlu melakukan konversi apa pun.
Yetti
@Yetti: Salah. Ada alasan bagus mengapa mekanisme perancah menambahkan bidang ID. Hapus dari salah satu tutorial saya dan gunakan Fiddler untuk melihatnya tidak ada di badan posting.
RickAndMSFT
2
Saya tidak yakin bagaimana komentar itu salah. Jika Model adalah properti For () 'd dalam tampilan, metode pengontrol harus diketik dengan kuat, dan diisi secara otomatis oleh ModelBinder.
Erik Philips
2

Seperti banyak fungsi lainnya, yang satu ini dapat digunakan dengan berbagai cara untuk memecahkan banyak masalah yang berbeda, saya menganggapnya sebagai alat lain di sabuk alat kami.

Sejauh ini, pembahasan hanya berfokus pada menyembunyikan ID, tetapi itu hanya satu nilai, mengapa tidak menggunakannya untuk banyak nilai! Itulah yang saya lakukan, saya menggunakannya untuk memuat nilai di kelas hanya satu tampilan pada satu waktu, karena html.beginform membuat objek baru dan jika objek model Anda untuk tampilan itu sudah memiliki beberapa nilai yang diteruskan padanya, itu nilai akan hilang kecuali Anda memberikan referensi ke nilai tersebut di formulir awal.

Untuk melihat motivasi besar bagi html.hiddenfor, saya sarankan Anda melihat Meneruskan data dari Tampilan ke Pengontrol di .NET MVC - "@model" tidak menyorot

Devin Andres Salemi
sumber