2013-07-09 10 views
5

Tôi nghĩ Html.HiddenFor có thể sử dụng các mẫu như Html.DisplayFor hoặc Html.EditorFor. Thật không may là phương pháp không chấp nhận một số TemplateName như những người khác.Mở rộng các mẫu ẩn danh trong ASP.NET MVC

Tôi biết, giải pháp thay thế sẽ là sử dụng một mẫu DisplayFor/EditorFor có HiddenFors. Nhưng tôi muốn tìm hiểu cách mở rộng phương thức Html.HiddenFor. Bất kỳ ai?

Kính trọng

Trả lời

5

Có vẻ như bạn đang đánh lừa bằng cách tương tự sai. HiddenFor tương ứng chính xác với thẻ <input type="hidden"/>. Giống như TextBoxFor, CheckBoxFor vv Các phương pháp này không được thiết kế để sử dụng mẫu. DisplayFor/EditorFor ở phía bên kia được tạo đặc biệt để sử dụng với các mẫu được xác định trong dự án. Vì vậy, những gì bạn đang yêu cầu là không thể out-of-the-box.

Tuy nhiên bạn luôn có thể xác định tình trạng quá tải của riêng mình cho HiddenFor với bất kỳ tập hợp thông số nào và bất kỳ logic nào bạn có thể yêu cầu.

1

Có quá tải chấp nhận tham số bổ sung - htmlAttributes. Và bạn có thể sử dụng nó để thêm một số thuộc tính vào thẻ kết quả.

Cũng cách thứ hai là tạo ra dao cạo xem một phần trong một trong các thư mục

~/Areas/AreaName/Views/ControllerName/DisplayTemplates/TemplateName.cshtml 
~/Areas/AreaName/Views/Shared/DisplayTemplates/TemplateName.cshtml 
~/Views/ControllerName/DisplayTemplates/TemplateName.cshtml 
~/Views/Shared/DisplayTemplates/TemplateName.cshtml 

với tên HiddenInput.cshtml

1

Dưới đây là những gì bạn làm, bạn tạo nó như một trình soạn thảo mẫu, bởi vì như Andre pointed out, HiddenFor tương đương với phương pháp helper như TextBoxForCheckboxFor.

Có khả năng bạn cũng sẽ muốn có một trình chỉnh sửa thực tế, do đó, hãy đặt trình chỉnh sửa thực thực của bạn dưới ~/Shared/EditorTemplates. Chúng tôi sẽ đặt "trình chỉnh sửa ẩn" của chúng tôi vào bộ điều khiển mà bạn muốn sử dụng.

~/Views/ControllerName/EditorTemplates/ModelName.cshtml 

Cho phép nói rằng chúng tôi có mẫu Person.

public class Person 
{ 
    public string First { get; set; } 
    public string Last { get; set; } 
} 

Chúng tôi sẽ tạo một chế độ xem một phần.

@Model Person 

@Html.HiddenFor(p => p.First); 
@Html.HiddenFor(p => p.Last); 

Và sau đó chúng tôi sẽ giả vờ là chúng tôi có một mô hình có chứa Person làm tài sản. Từ quan điểm chính của chúng tôi, chúng tôi gọi "trình chỉnh sửa ẩn" của chúng tôi giống như vậy.

@Model Foo 

@Html.EditorFor(f => f.Person) 

Vắt chanh dễ dàng. Một chút hacky, nhưng nó hoạt động như một sự quyến rũ.

+0

Cảm ơn vì điều này như thế nào, nhưng như tôi đã nói trong câu hỏi của mình, tôi đã biết rằng đây là giải pháp có thể :-) – float

+0

Điều này không dành cho bạn @float. Điều này là để cứu anh chàng tiếp theo như tôi googles và tìm thấy này Q/A một số tiền vô lý của thời gian. – RubberDuck