2008-10-20 46 views
11

Tôi đang xây dựng trang web ASP.Net MVC. Thay vì có mọi thứ trong một dự án, tôi đã quyết định tách Web, Mô hình và Bộ điều khiển ra thành các dự án khác nhau trong cùng một giải pháp, tham chiếu lẫn nhau.Tại sao tiện ích HtmlHelper của tôi không hoạt động?

Các tham chiếu đi như thế này:

Web --- [tham khảo] ---> điều khiển --- [tham khảo] ---> Mẫu

Bây giờ tôi muốn thêm 2 phương thức tùy chỉnh cho lớp HtmlHelper - chúng được gọi là "IncludeScript" và "IncludeStyle". Mỗi người có một tham số chuỗi đơn và tạo ra một tập lệnh hoặc thẻ liên kết tương ứng.

Tôi đã tạo một lớp người mở rộng, theo tài liệu trên web và viết hai phương pháp và biên soạn ứng dụng.

Bây giờ, khi tôi đi vào trang Public.Master (mà là chính chủ-page của tôi, và một trong những nơi mà tôi có ý định sử dụng các phương pháp), tôi có thể nhập mã như dưới đây:

<%= Html.IncludeScript("\js\jquery.js") %>

Phương thức chọn IntelliSense và phương thức IncludeScript và cho tôi thấy cú pháp tốt. Vì vậy, tôi hy vọng rằng mọi thứ sẽ hoạt động.

Nhưng không.

Tất cả mọi thứ biên dịch, nhưng ngay sau khi tôi chạy các ứng dụng, tôi nhận được lỗi thời gian chạy sau từ dòng 14 của Default.aspx.cs:

c:\\Projects\\PhoneReel\\PhoneReel.Web\\Views\\Shared\\Public.Master(11): error CS0117: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'IncludeScript'

Đây là dòng mã mà lỗi xảy ra trên:

httpHandler.ProcessRequest(HttpContext.Current);

Bất cứ ý tưởng gì có thể đi sai ở đây?

+0

Bạn có thể dán mã Bao gồm tập lệnh và cũng là dự án mà nó có mặt không? – Ramesh

Trả lời

16

Kiểm tra để đảm bảo rằng không gian tên của tiện ích của bạn có thể truy cập được ở chế độ xem của chúng tôi. Bạn cần một trong hai này theo quan điểm của bạn:

<%@ Import Namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"%> 

hoặc này trong web không gian tên cấu hình phần của bạn:

<add namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"/> 
+1

Tôi đã thử cả hai - vẫn không có gì. BTW, chỉ trong trường hợp, tôi đã thử làm điều này trong một giải pháp hoàn toàn mới với các dự án mới và chỉ cần thêm tệp của tôi, và nó * STILL * cho tôi lỗi chính xác tương tự. – Jonathan

+1

Nó phù hợp với tôi! Cảm ơn câu trả lời của bạn! –

0

Bạn có chắc trình biên dịch được đặt thành .NET Framework 3.5 không? Điều này đã xảy ra với tôi khi tôi vô tình thiết lập trình biên dịch thành .NET Framework 2.0

+0

Tôi đã kiểm tra các thuộc tính của dự án cho tất cả 3 dự án và tất cả chúng đều được đặt thành .NET Framework 3.5. – Jonathan

1

Đảm bảo chỉ thị nhập khẩu vào không gian tên phương thức tiện ích mở rộng trong trang của bạn.

Nếu không, Visual Studio có thể thấy nhưng trang web của bạn sẽ không thể.

+0

Tôi đặt dòng sau trong Public.Master.cs: sử dụng PhoneReel.Web.Resources; Tôi cũng đặt dòng sau trong Public.Master <% @ Nhập không gian tên = "PhoneReel.Web.Resources"%> Vẫn gặp lỗi chính xác. – Jonathan

0

Trong phương pháp IncludeScript đảm bảo rằng những gì bạn đang mở rộng là System.Web.Mvc.HtmlHelper . Có thể có một HtmlHelper trong một số không gian tên khác.

5

Nếu bạn đang sử dụng , hãy nhập mạnh lượt xem và phương pháp mở rộng của bạn đang mở rộng HtmlHelper<object>, nó sẽ không tìm thấy tiện ích.Bạn sẽ phải tạo bộ mở rộng chung để mở rộng HtmlHelper<T>.

public static string IncludeScript<T>(this HtmlHelper<T> html, string url) { 
    return "<script type=\"text/javascript\" src=\"" + url + "\"></script>"; 
} 

Sau đó, bạn sẽ thấy phương pháp mở rộng của bạn hiển thị.

Tôi hy vọng điều đó sẽ hữu ích.

+1

Giải pháp chính xác ở đây là thực sự không bao gồm chung ở tất cả - sử dụng 'html HtmlHelper này' thay vì có bất kỳ chung hoặc . Trừ khi tất nhiên bạn thực sự cần loại mô hình. –

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