1

我从 Visual Studio 2012 中的 Web 窗体模板生成了我的 ASP.NET 站点。我在母版页中有以下代码:

<asp:PlaceHolder runat="server">
    <%: Styles.Render("~/Content/themes/base/css", "~/Content/css") %>
    <%: Scripts.Render("~/bundles/modernizr") %>
</asp:PlaceHolder>

当我从 VS 运行我的网站时,一切正常。当我将它部署到服务器时,无法加载 css 文件,因为上面的代码解析为

<link href="/Content/themes/base/css?v=UM624qf1uFt8dYtiIV9PCmYhsyeewBIwY4Ob0i8OdW81" rel="stylesheet" type="text/css" />
<link href="/Content/css?v=tMLDfv3u-lElLSOX_gsfU7tfsfKPoY_vJBePC7KLa6U1" rel="stylesheet" type="text/css" />
<script src="/bundles/modernizr?v=EuTZa4MRY0ZqCYpBXj_MhJfFJU2QBDf0xGrV_p1fHME1" type="text/javascript"></script>

所有路径都从域的根目录开始计算,而我的站点部署在子文件夹下,例如http://MyDomain.com/MySyte/. 显然,波浪号运算符~处理不当。在所有其他地方,例如 hrefs,它已被正确替换,并且导航在已部署的站点中工作正常。

另一个例子。对于来自母版页的此代码

<asp:ScriptManager runat="server" AjaxFrameworkMode="Explicit">
    <Scripts>
        <asp:ScriptReference Name="MsAjaxBundle" />
        <asp:ScriptReference Name="jquery" />
        ...
    </Scripts>
</asp:ScriptManager>

我有这个 html 输出

<script src="/bundles/MsAjaxJs?v=eYkLZimNY09iWQvWpdPDkxCLGwdMBLWkJ4bU5r3y6GU1" type="text/javascript"></script>
<script src="Scripts/jquery-1.6.2.min.js" type="text/javascript"></script>

所以 jquery 的路径是正确的和相对的,而 MsAjaxBundle 导致了一些绝对路径。

我认为这种行为是一个错误。我该如何解决?

更新:

  • 视窗 7 x64
  • IIS 7.5
  • ASP.NET 应用程序目标框架 4.5
  • IIS 应用程序池框架 4.0
4

3 回答 3

1

波浪号是来自应用程序根的参考点。您的目录很可能MySyte只是您网站之外的一个文件夹,而不是配置为应用程序。

您需要将目录配置为 IIS 中的应用程序。对于 IIS 7.x 和 8,您可以右键单击 MySyte 文件夹并选择转换为应用程序并选择适当的 AppPool。

在此处输入图像描述

于 2012-08-20T13:47:06.870 回答
1

问题是由我们的代理服务器引起的,它实际上是转发http://MyDomain/MySite/http://InternalDomain:InternalPort/. 对于该内部域应用程序根目录实际上是一个站点根目录。

于 2012-08-25T21:34:20.917 回答
0

使用答案功能是因为我无法发表评论(没有足够的权限),但要感谢操作员在普通 asp 页面中使用的语法。

<asp:PlaceHolder runat="server">
    <%: Styles.Render("~/Content/themes/base/css", "~/Content/css") %>
    <%: Scripts.Render("~/bundles/modernizr") %>
</asp:PlaceHolder>
于 2013-09-16T10:33:05.400 回答