2011-08-14 31 views
7

Tôi có một phương pháp mở rộng html để truy xuất URL cho tệp nằm trong cùng thư mục với chế độ xem.MVC3: Cách tốt nhất để có được đường dẫn xem từ đối tượng HtmlHelper là gì?

Ví dụ

/Views/Home/Index.cshtml 
/Views/Home/Index.js 
/Views/Home/Index.css 

Đây có phải là cách tốt nhất để làm điều này? Tôi không thích vì tôi phải làm diễn viên sau đây. Tôi chắc chắn rằng RazorView sẽ không hoạt động nếu bạn đang sử dụng một công cụ xem khác nhau, nhưng IView chỉ có một phương pháp Render trên đó.

((RazorView)helper.ViewContext.View).ViewPath 

Dưới đây là toàn bộ phương pháp

public static string GetUrl(this System.Web.Mvc.HtmlHelper helper, string fileName) { 
    string virtualPath = ((RazorView) helper.ViewContext.View).ViewPath; 
    virtualPath = virtualPath.Substring(0, virtualPath.LastIndexOf("/") + 1); 
    return virtualPath + fileName; 
} 
+0

gì được bạn cuối cùng sẽ làm gì với URL? Chèn nó vào một số HTML và gửi nó vào trình duyệt? Nếu có, điều này sẽ không hoạt động vì thư mục con Chế độ xem được bảo vệ và không thể truy cập qua URL. – Codo

+0

Tôi đã thực hiện các tệp này có thể truy cập qua web.config bằng cách xóa BlockViewHandler khỏi danh sách các trình xử lý. –

+0

Bạn có chắc đây là một việc tốt để làm không? Bạn không phiền nếu mọi người tải xuống tệp .cshtml của bạn để kiểm tra chúng vì lỗi bảo mật? – Codo

Trả lời

-3

Bạn có thể lấy URL hiện tại sử dụng này: How to get current page URL in MVC 3. Và sau đó phân tích cú pháp URL từ đó.

HTH.

+0

Câu hỏi này là về việc nhận đường dẫn ảo đến chế độ xem chứ không phải URL yêu cầu. – Dunc

1

Tôi đang sử dụng một cái gì đó như thế này:

public static string GetUrl(this HtmlHelper html, string filename) 
{ 
    var viewPath = ((WebViewPage)html.ViewDataContainer).VirtualPath; 
    var viewFolder = viewPath.Substring(0, viewPath.LastIndexOf("/") + 1); 
    var virtualScriptPath = viewFolder + filename; 

    var urlHelper = new UrlHelper(html.ViewContext.RequestContext); 
    return urlHelper.Content(virtualScriptPath); 
} 

Có một dàn diễn viên để WebViewPage ở đó, nhưng tôi nghĩ rằng (chính xác cho tôi nếu tôi sai) rằng nó sẽ làm việc bất kể bạn đang sử dụng Razor hoặc công cụ xem dạng Webforms.

6

Nếu bạn sử dụng Razor view engine, Bạn có thể sử dụng này:

((System.Web.Mvc.RazorView)htmlHelper.ViewContext.View).ViewPath 

Chúc may mắn

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