6

Tôi cần tạo phương thức trợ giúp html tùy chỉnh. Theo như tôi biết có hai cách:Cú pháp ASP.NET MVC @helper vs Html Trình trợ giúp mở rộng

  1. Sử dụng cú pháp @helper razor. http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx

  2. Tạo phương thức mở rộng HtmlHelper.

Giải pháp nào tốt hơn và tại sao? Ưu điểm và nhược điểm là gì?

Tôi chỉ đọc điều đó trong MVC 3 khi @helper được tạo ra trên toàn cầu trong tệp .cshtml riêng biệt, không thể sử dụng trình trợ giúp html tích hợp khác. Không biết có lẽ trong MVC 4 nó là possisble.

Vui lòng trợ giúp.

+0

có thể trùng lặp của [ASP.NET MVC: Razor @helper vs các phương thức mở rộng cho HtmlHelper - được ưu tiên?] (Http://stackoverflow.com/questions/6285825/asp-net-mvc-razor-helper-vs -extension-methods-to-htmlhelper-which-is-preferr) – James

Trả lời

3

giải pháp gì là tốt hơn và tại sao?

Tùy theo.

Ưu điểm và nhược điểm là gì?

  • Ưu điểm của phần mở rộng tùy chỉnh HtmlHelper:
    • Nó sẽ làm việc không có vấn đề gì công cụ xem bạn đang sử dụng
    • Nó được đơn vị kiểm chứng
    • Nó là xách tay giữa các ứng dụng
  • Nhược điểm của tiện ích HtmlHelper tùy chỉnh:
    • thể trở nên cồng kềnh để viết rất nhiều của logic HTML trong C#
  • Ưu điểm của @helper:
    • đã không thấy bất kỳ, tôi không bao giờ sử dụng nó
  • Nhược điểm của @helper:
    • Chưa từng thấy, tôi không bao giờ sử dụng nó

Thực ra điều này là @helper là IMHO hoàn toàn vô dụng. Khi bạn muốn những lợi thế tôi đã đề cập về một phần mở rộng HtmlHelper tùy chỉnh, bạn, tốt, xây dựng một phần mở rộng HtmlHelper tùy chỉnh.

Và nếu bạn phải đối mặt với một số nhược điểm tôi đã đề cập về phần mở rộng HtmlHelper tùy chỉnh, bạn, tốt, hãy sử dụng một phần xem.

Tôi chỉ đọc điều đó trong MVC 3 khi @helper được tạo ra trên toàn cầu trong một tệp riêng biệt .cshtml không thể sử dụng trình trợ giúp html tích hợp khác.

Điều đó sai. Bạn hoàn toàn có thể sử dụng các trình trợ giúp Html khác. Bạn chỉ cần phải vượt qua chúng như thông số:

@helper FooBar(HtmlHelper html) { 
    feel free to use the html helper here 
} 

và khi tiêu thụ từ một cái nhìn:

@HelperName.FooBar(Html) 
+0

** Câu hỏi theo dõi **: Chúng tôi có thể gọi cho những người trợ giúp HTML hiện có từ bên trong một Phương pháp mở rộng trình trợ giúp HTML tùy chỉnh không? Ví dụ: nếu tôi tạo Trình trợ giúp HTML tùy chỉnh được gọi là 'CustomFieldDateTime', tôi có thể hiển thị Html.ValidationMessage ("control4") bên trong không? Hoặc tôi phải sử dụng cú pháp @helper hoặc xem một phần? –

+1

Có, bạn có thể gọi những người trợ giúp HTML hiện có bên trong trình trợ giúp tùy chỉnh. Bạn có thể làm điều đó bằng cách đưa phương thức mở rộng vào phạm vi ('using System.Web.Mvc.Html') và sau đó gọi phương thức được yêu cầu. –

+0

Cảm ơn Darin. Tôi đã thành công với giải pháp của bạn. Tôi đã sử dụng đoạn mã sau bên trong phương thức mở rộng HtmlHelper của mình: 'IHtmlString validationMsg = helper.ValidationMessage (controlName);' Nơi helper là 'trợ giúp HtmlHelper' này. –

3

Họ có thể giống như người sử dụng kiểm soát Vs Custom Controls

Sử dụng @helper cho các định dạng kiểu dao cạo trong quan điểm. Sử dụng các phương pháp mở rộng cho các giải pháp chung, ví dụ như quá tải việc tạo nhãn có tham số bổ sung.

Bạn có thể tìm thấy lời giải thích chi tiết với các ví dụ here

7

Một lợi ích để @helper là, kể từ khi đang trong tầm nhìn, bạn có thể thực hiện thay đổi với nó mà không cần phải biên dịch lại mã của bạn. Điều này cho phép bạn tinh chỉnh helper một cách nhanh chóng và dễ dàng trong quá trình phát triển. Cá nhân tôi thích giữ lại đánh dấu trong quan điểm nếu có thể vì lý do này.

Lợi ích liên quan của @helper là HTML của bạn sẽ được hưởng lợi từ intellisense, trong khi viết HTML trong mã C# sẽ không có lợi ích như vậy.

Ngoài ra, nếu bạn đang viết một trình trợ giúp không có nghĩa là có thể sử dụng lại bên ngoài một chế độ xem duy nhất, thì @helper giúp dễ dàng hơn để làm rõ điều đó. Phương thức mở rộng HtmlHelper sẽ gây nhầm lẫn nếu chỉ một chế độ xem được dùng để sử dụng nó (trừ khi bạn quản lý để đặt nó trong một lớp và trong không gian tên nơi chỉ có một chế độ xem đó sẽ thấy phương pháp mở rộng).

Các vấn đề liên quan