Javascript MVC2 IIS-在部署时正确解析外部样式表和脚本中的URL?

Javascript MVC2 IIS-在部署时正确解析外部样式表和脚本中的URL?,javascript,css,asp.net-mvc-2,iis,Javascript,Css,Asp.net Mvc 2,Iis,我将VisualStudioMVC2项目更改为在本地IIS服务器上进行调试,但在URL解析方面遇到了问题 我现在必须使用如下的ResolveUrl()方法,而不是硬编码ajax请求的链接: <%= ResolveUrl("~/Controller/Action")%> 当javascript存在于视图中时,这很好。但是我在外部的.js文件中有javascript,我不能在其中使用ResolveUrl()函数 此问题还影响到指向外部样式表中图像的链接 我觉得我不应该每次从Visu

我将VisualStudioMVC2项目更改为在本地IIS服务器上进行调试,但在URL解析方面遇到了问题

我现在必须使用如下的ResolveUrl()方法,而不是硬编码ajax请求的链接:

<%= ResolveUrl("~/Controller/Action")%>

当javascript存在于视图中时,这很好。但是我在外部的.js文件中有javascript,我不能在其中使用ResolveUrl()函数

此问题还影响到指向外部样式表中图像的链接

我觉得我不应该每次从VisualStudioWeb服务器移动到本地IIS web服务器或实际部署的web服务器时都手动更改这些链接

解决这个问题的最佳方法是什么


到目前为止,我所能想到的只是使用相对路径,如../Content/Images/image.gif

,因此我建议在c#文件中有一个隐藏的文本字段,在那里写入绝对url路径,然后在读取文本文件后将路径附加到外部js文件

但是我真的看不到从js文件加载另一个js文件有什么好处。只需一次加载所有文件,并在yoiur js文件中有条件地加载eit。我假设您正在从js文件本身加载另一个js文件,因为您希望在加载js文件时执行一些操作。只需在第一个文件的window.load上调用下一个文件中的函数即可实现相同的功能。。这就是你的最终目标吗

我想你不明白我在干什么

假设您必须执行回发以执行控制器食物和操作GetMenu,那么在您的aspx页面中,您将有一个隐藏字段,其值设置如下:

<input type="hidden" id="hidden-getmenu-locator" value=<%=Url.Action("GetMenu","Food") %> />
<script type="text/javascript" src="<%=Url.Content("~/Scripts/jquery-ui-1.8.custom.min.js")%>"></script>

关于css和js,您可以按如下方式获得它们:

<input type="hidden" id="hidden-getmenu-locator" value=<%=Url.Action("GetMenu","Food") %> />
<script type="text/javascript" src="<%=Url.Content("~/Scripts/jquery-ui-1.8.custom.min.js")%>"></script>

或者再次存储在隐藏字段中,然后使用它


希望这会有所帮助,所以我建议在你的c#文件中有一个隐藏的文本字段,你在那里写下绝对url路径,然后在从文本文件读取后将路径附加到外部js文件中

但是我真的看不到从js文件加载另一个js文件有什么好处。只需一次加载所有文件,并在yoiur js文件中有条件地加载eit。我假设您正在从js文件本身加载另一个js文件,因为您希望在加载js文件时执行一些操作。只需在第一个文件的window.load上调用下一个文件中的函数即可实现相同的功能。。这就是你的最终目标吗

我想你不明白我在干什么

假设您必须执行回发以执行控制器食物和操作GetMenu,那么在您的aspx页面中,您将有一个隐藏字段,其值设置如下:

<input type="hidden" id="hidden-getmenu-locator" value=<%=Url.Action("GetMenu","Food") %> />
<script type="text/javascript" src="<%=Url.Content("~/Scripts/jquery-ui-1.8.custom.min.js")%>"></script>

关于css和js,您可以按如下方式获得它们:

<input type="hidden" id="hidden-getmenu-locator" value=<%=Url.Action("GetMenu","Food") %> />
<script type="text/javascript" src="<%=Url.Content("~/Scripts/jquery-ui-1.8.custom.min.js")%>"></script>

或者再次存储在隐藏字段中,然后使用它


希望对你有所帮助这里有一些我可以给你的建议。首先,您不应该使用
ResolveUrl
解析控制器操作,因为您仍然在硬编码,没有利用路由。如果明天您决定更改global.asax中的路线定义,该怎么办?您应该使用如下Url帮助程序:

<%= Url.Action("Action", "Controller") %>
<link href="<%= Url.Content("~/styles/foo.css") %>" rel="stylesheet" type="text/css" />
最后一部分是javascript文件。在它们内部,您不能使用帮助器来定义URL。因此存在不同的技术。就我个人而言,我喜欢渐进式增强的低调javascript,这意味着我需要的url已经在HTML中了。例如,思考一个链接或表单的Ajaxing。在您的视图中,您会:

<%= Html.ActionLink("foo bar", "foo") %>
但在某些情况下,您在DOM中没有url。因此,您可以在视图中使用全局变量:

<script type="text/javascript">
    var myurl = '<%= Url.Action("foo") %>';
</script>

var myurl='';

在外部javascript中使用这个
myurl
全局变量。

以下是我可以给你的一些提示。首先,您不应该使用
ResolveUrl
解析控制器操作,因为您仍然在硬编码,没有利用路由。如果明天您决定更改global.asax中的路线定义,该怎么办?您应该使用如下Url帮助程序:

<%= Url.Action("Action", "Controller") %>
<link href="<%= Url.Content("~/styles/foo.css") %>" rel="stylesheet" type="text/css" />
最后一部分是javascript文件。在它们内部,您不能使用帮助器来定义URL。因此存在不同的技术。就我个人而言,我喜欢渐进式增强的低调javascript,这意味着我需要的url已经在HTML中了。例如,思考一个链接或表单的Ajaxing。在您的视图中,您会:

<%= Html.ActionLink("foo bar", "foo") %>
但在某些情况下,您在DOM中没有url。因此,您可以在视图中使用全局变量:

<script type="text/javascript">
    var myurl = '<%= Url.Action("foo") %>';
</script>

var myurl='';

在外部javascript中,使用这个
myurl
全局变量。

我不太清楚您的意思。我在外部.js文件中有javascript对象,可以根据需要加载到页面上。其中一些使用ajax发回服务器,这就是硬编码URL的问题所在。我的外部CSS也有类似的情况。我使用CSS精灵,背景图片URL也是硬编码的。我知道你现在得到了什么,但我不相信这是相关的。也许我没有很好地解释我的问题:(我导入外部.css和.js文件没有问题。问题是,在这些文件中,我有硬编码的路径,我不能使用像ResolveURL()、ot Url.Action()这样的东西)在上。除非有办法在外部的.css和.js文件中使用这些函数?我假设没有。外部的.css和.js文件仍然是服务器的本地文件,但我相信asp.net将它们视为静态内容。注释空间用完了。我不希望在我的site.master上有隐藏的输入来允许我的外部javascript获取正确的路径。这是可以做到的,但是它没有解决css问题。我真的不明白。为什么在JS:var urlForAjaxCall=$('