2008-12-08 19 views
21

Tôi đang viết một phương thức trợ giúp cho ASP.NET MVC và tôi cần gọi Url.Content để nhận URL thích hợp cho ngữ cảnh. Tuy nhiên, để tạo một UrlHelper mới(), tôi cần phải lấy RequestContext hiện tại (System.Web.Routing.RequestContext để được chính xác) và tôi không chắc chắn làm thế nào để lấy nó. Có ai biết không?Làm thế nào để bạn có quyền truy cập vào System.Web.Routing.RequestContext hiện tại từ bên trong một phương thức trợ giúp tùy chỉnh trong ASP.NET MVC?

+1

Vị trí bối cảnh sẽ phụ thuộc vào những gì phương pháp mở rộng sẽ được mở rộng. Điều này sẽ được sử dụng trong một cái nhìn, điều khiển hoặc ở nơi khác? –

Trả lời

17

Nhận thấy điều này vẫn chưa được trả lời. Kể từ MVC 1.0, bạn có thể làm:

public static string NewHelperMethod(this HtmlHelper helper) 
{ 
    UrlHelper url = new UrlHelper(helper.ViewContext.RequestContext); 
+1

Tôi muốn biết làm thế nào để làm điều này từ bộ điều khiển, câu trả lời này đã cho tôi đủ thông tin để tìm ra rằng tôi muốn ControllerContext.RequestContext. – lambacck

1

Không tạo tài khoản mới. Chỉ cần mở rộng UrlHelper hiện, giống như bạn muốn mở rộng HtmlHelper:

public static string IdLink(this UrlHelper helper, Guid id) 
    { //... 

Nếu bạn phải sử dụng cả hai HtmlHelper và UrlHelper, vượt qua một trong số họ là một (phi "này") lập luận thông thường.

1

Như đã đề cập ở trên, chỉ cần mở rộng HtmlHelper và ngữ cảnh được hiển thị theo cách đó. Ví dụ:

public static string ExtensionMethodName(this HtmlHelper html,object o) 
    { 
     html.ViewContext.HttpContext.Request.Uri ... etc  
    } 
3

Bạn có thể tìm thấy câu trả lời ở nơi khác, nhưng ở đây đi;

Trong một hành động điều khiển, bạn có thể tới các RequestContext hiện như sau:

public ActionResult SomeAction(){ 
    var helper = new UrlHelper(this.ControllerContext.RequestContext); 
    ... 
} 
46

Nếu IHttpHandler hiện nay là MvcHandler, bạn có thể sử dụng

((MvcHandler)HttpContext.Current.Handler).RequestContext 
+0

Đây thực sự là những gì tôi cần ... từ ngữ cảnh thực sự tĩnh – Kevin

+0

Lưu lại ngày của tôi, cảm ơn bạn rất nhiều! –

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