2012-04-13 40 views
9

Tôi có dự án ASP.NET MVC3 và tôi đang viết một số phương thức mở rộng trả về HTML nhưng tôi cần UrlHelper để hiển thị chúng. Để làm điều đó tôi đang mở rộng UrlHelper nhưng tôi không thích ngữ nghĩa vì UrlHelper nên làm việc với URL và HtmlHelper với HTML. Tôi muốn mở rộng HtmlHelper với phương pháp này thay vì UrlHelper.Cách gọi UrlHelper khi viết phần mở rộng cho HtmlHelper

Vấn đề của tôi là bây giờ tôi không làm cách nào để truy cập UrlHelper từ phương thức mở rộng của HtmlHelper, thậm chí có thể không? Hoặc tôi phải gắn bó với phần mở rộng UrlHelper.

Tôi biết rằng tôi có thể gửi trình trợ giúp Url làm đối số nhưng tôi không thích giải pháp này lắm.

Sau code is mẫu của phương pháp mở rộng Tôi đang nói về:

public static HtmlString AnchorLink(this UrlHelper url, string text, string action, string anchor) { 
    return new HtmlString(string.Format("<a href=\"{0}#{2}\">{1}</a>", url.Action(action), text, anchor)); 
} 

Cảm ơn

+0

thể trùng lặp của [Tạo URL trong HTML helper] (http://stackoverflow.com/questions/1443647/generate-url-in-html-helper) – Marijn

Trả lời

20

Bạn có thể nhanh chóng một UrlHelper chính mình ...

public static HtmlString AnchorLink(this HtmlHelper html, string text, string action, string anchor) { 
    var urlHelper = new UrlHelper(html.ViewContext.RequestContext); 
} 
+1

Ý tưởng thú vị, là instantiating của helper mới _fast_ operation (ví dụ như 'Danh sách mới ()')? Bạn sẽ giới thiệu nó như là giải pháp cho vấn đề của tôi? Hoặc cung cấp UrlHelper làm đối số sẽ là _better_? – NightElfik

+3

Hiệu suất-khôn ngoan nó sẽ được thực tế không đáng kể. Các nhà xây dựng không làm bất cứ điều gì đặc biệt khác sau đó thiết lập một số biến riêng. 'InitHelpers' cho chế độ xem của bạn thực hiện chính xác như nhau, cụ thể là gọi hàm tạo. Nếu bạn muốn bỏ qua thực tế là một tham số bổ sung cho UrlHelper sẽ 'lộn xộn' chế độ xem của bạn, bạn có thể thêm nó làm tham số. Tuy nhiên tôi sẽ bỏ qua thực tế hiệu suất và đi cho dễ đọc. – Ropstah

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