MVC3:从HtmlHelper对象获取视图路径的最佳方法是什么?

时间:2011-08-14 17:09:56

标签: asp.net asp.net-mvc-3 razor

我有一个html扩展方法来检索与视图位于同一文件夹中的文件的URL。

示例

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

这是最好的方法吗?我不喜欢它,因为我必须做以下演员。我确信如果您使用的是不同的视图引擎,RazorView将无法工作,但IView上只有一个Render方法。

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

这是完整的方法

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

3 个答案:

答案 0 :(得分:6)

如果您使用Razor view engine,则可以使用:

((System.Web.Mvc.RazorView)htmlHelper.ViewContext.View).ViewPath
祝你好运

答案 1 :(得分:1)

我正在使用这样的东西:

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

在那里有一个演员到WebViewPage,但我认为(如果我错了,请纠正我),无论你是使用Razor还是Webforms视图引擎,它都能正常工作。

答案 2 :(得分:-3)

您可以使用以下网址获取当前网址:How to get current page URL in MVC 3。然后从那里解析URL。

HTH。