将ASP.NET MVC应用程序部署到多个虚拟目录(URL引用和JS文件的问题)

时间:2010-02-09 13:47:33

标签: javascript asp.net-mvc html-helper urlhelper

我不确定我的问题是否正确,但这是问题:

我有一个部署在多个虚拟目录的MVC.NET应用程序。原因是因为我们在质量保证的各个阶段都有不同的版本。

问题在于,在一个站点中,.js引用是针对

  

/ VirtualDir /scripts/file.js

在另一个网站上

  

/ OtherVirtualDir /scripts/file.js

这个问题的另一个方面是我有HtmlHelpers创建链接。这个问题是我在HtmlHelper方法中没有UrlHelper。将UrlHelper从视图传递到HtmlHelper是否“没问题”?我可以通过这个来生成标签吗?

还有其他人不得不处理这类问题吗?有什么建议吗?

由于

戴夫

3 个答案:

答案 0 :(得分:1)

您可以考虑创建控制器以返回封装路径的静态内容(css,js等)的FileResult

答案 1 :(得分:1)

好的,最终结果证明解决方案是:

<%= Html.JavaScriptTag("siteFunctions.js")%>
<%= Html.MyCSS("Site.css")%>
<%= Html.MyImage("loading_large.gif") %>

以上第一个例子的以下定义

public static string JavaScriptTag(this HtmlHelper htmlHelper, string fileName)
{
    TagBuilder js = new TagBuilder("script");
    string path = VirtualPathUtility.ToAbsolute("~/Scripts/" + fileName);
    js.MergeAttribute("src", path);
    js.MergeAttribute("type", "text/javascript");

    return js.ToString();
}

这些HtmlHelper太棒了!

答案 2 :(得分:1)

当从MVC中的View中引用文件时,我总是使用这个

<script src="<%= Url.Content ("~/Scripts/jquery-1.3.2.js") %>" type="text/javascript"></script>

由于View引用与请求它们的资源相关,因此如果您需要在.JS文件中使用“相对”路径,则在母版页中使用此位Javascript可能会有所帮助。

<script type="text/javascript">var imgRoot = '<% = Page.ResolveUrl("~/Images/") %>';</script>

最后,CSS工作正常,因为CSS中的所有路径都相对于.css文件的位置。