Câu trả lời:
Nó tạo một đầu vào ẩn trên biểu mẫu cho trường (từ mô hình của bạn) mà bạn chuyển nó.
Nó hữu ích cho các trường trong Model / ViewModel của bạn mà bạn cần phải duy trì trên trang và đã trả lại khi một lệnh gọi khác được thực hiện nhưng người dùng không nên nhìn thấy.
Hãy xem xét lớp ViewModel sau:
public class ViewModel
{
public string Value { get; set; }
public int Id { get; set; }
}
Bây giờ bạn muốn trang chỉnh sửa lưu trữ ID nhưng không thấy nó:
<% using(Html.BeginForm() { %>
<%= Html.HiddenFor(model.Id) %><br />
<%= Html.TextBoxFor(model.Value) %>
<% } %>
Điều này dẫn đến tương đương với HTML sau:
<form name="form1">
<input type="hidden" name="Id">2</input>
<input type="text" name="Value" value="Some Text" />
</form>
Và để sử dụng lại đầu vào ID ẩn trên phương pháp hành động Chỉnh sửa của bạn:
[HttpPost]
public ActionResult Edit(FormCollection collection)
{
ViewModel.ID = Convert.ToInt32(collection["ID"]);
}
Giống như rất nhiều chức năng, chức năng này có thể được sử dụng theo nhiều cách khác nhau để giải quyết nhiều vấn đề khác nhau, tôi coi nó như một công cụ khác trong thanh công cụ của chúng tôi.
Cho đến nay, cuộc thảo luận tập trung nhiều vào việc đơn giản là ẩn một ID, nhưng đó chỉ là một giá trị, tại sao không sử dụng nó cho rất nhiều giá trị! Đó là những gì tôi đang làm, tôi sử dụng nó để tải các giá trị trong một lớp chỉ một chế độ xem tại một thời điểm, bởi vì html.beginform tạo ra một đối tượng mới và nếu đối tượng mô hình của bạn cho chế độ xem đó đã có một số giá trị được chuyển cho nó, thì các giá trị sẽ bị mất trừ khi bạn cung cấp tham chiếu đến các giá trị đó trong biểu mẫu bắt đầu.
Để thấy động lực tuyệt vời cho html.hiisedfor, tôi khuyên bạn nên xem Truyền dữ liệu từ Chế độ xem sang Bộ điều khiển trong .NET MVC - "@model" không đánh dấu
Việc sử dụng mã Razor @ Html.Hidden hoặc @ Html.HiddenFor tương tự như mã Html sau
<input type="hidden"/>
Và cũng tham khảo theo đường dẫn sau