2011-08-14 16 views
7

Görünümle aynı klasörde bulunan bir dosyanın URL'sini almak için bir html uzantı yöntemim var.MVC3: Bir HtmlHelper nesnesinden görünüm yolunu almanın en iyi yolu nedir?

Örnek

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

bu Bunu yapmanın en iyi yolu mu? Bundan hoşlanmıyorum çünkü şu kadroyu yapmak zorundayım. Farklı bir görünüm motoru kullanıyorsanız, RazorView'in işe yaramayacağından eminim, ancak IView'in sadece bir Render yöntemi vardır.

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

İşte tam yöntem

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

? Onu bir HTML'ye yerleştir ve tarayıcıya gönder? Evetse, Views alt dizini korumalı ve bir URL aracılığıyla erişilemediğinden bu durumun çalışması olası değildir. – Codo

+0

Bu dosyaları, işleyicilerin listesinden BlockViewHandler öğesini kaldırarak web.config üzerinden eriştim. –

+0

Bunun iyi bir şey olduğuna emin misin? İnsanlar güvenlik hataları için onları incelemek için .cshtml dosyalarınızı indirir mi? – Codo

cevap

-3

olduğunu Bunu kullanarak mevcut URL alabilecek: How to get current page URL in MVC 3. Ardından URL'yi oradan ayrıştırın.

HTH.

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); 
} 

Orada WebViewPage bir döküm, ama (yanılıyorsam beni düzeltin) düşünüyorum olursa olsun Razor hangisini kullanırsanız kullanın çalışacaklardır:

+0

Bu soru, sanal URL'yi görünüm URL'sine değil görünümüne almakla ilgilidir. – Dunc

1

Böyle bir şey kullanıyorum veya Webforms motoru gösterir. Eğer Razor view engine kullanırsanız

6

, bu kullanabilirsiniz:

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

sonunda URL ile yapacağız Ne İyi şanslar

İlgili konular