【发布时间】:2009-05-28 20:30:50
【问题描述】:
我正在通过 jQuery.load('/Business/Tags') 加载一些内容,这在使用本地网络服务器时效果很好。但是当使用 iis 时,这并不能正确解决。我已经看到了几种不同的方法来解决这个问题,例如 ResolveUrl。在您的 javascript 中处理解析 url 的最佳方法是什么?
【问题讨论】:
标签: jquery asp.net-mvc
我正在通过 jQuery.load('/Business/Tags') 加载一些内容,这在使用本地网络服务器时效果很好。但是当使用 iis 时,这并不能正确解决。我已经看到了几种不同的方法来解决这个问题,例如 ResolveUrl。在您的 javascript 中处理解析 url 的最佳方法是什么?
【问题讨论】:
标签: jquery asp.net-mvc
我的 JavaScript 遇到了这个确切的问题。由于我的 JavaScript 也在一个单独的文件中,该文件包含在我的母版页中,因此我无法使用 ResolveUrl。
在我的案例中,这是我解决它的方法。我在顶部的母版页的 head 标记中包含了以下 JavaScript:
<script type="text/javascript">
var baseUrl = "<%= Request.Url.GetLeftPart(UriPartial.Authority) %>";
</script>
我正在设置一个名为 baseUrl 的所有 JavaScript 文件都可以访问的全局变量。
您的代码将变为:
jQuery.load(baseUrl + '/Business/Tags');
【讨论】:
我在可能的情况下使用带有 JavaScript/jQuery 的 Url.Action/Url.RouteUrl 助手:
$.load('<%= Url.Action("Tags", "Business") %>')
或
$.load('<%= Url.RouteUrl("BusinessTagsRoute") %>')
在其他情况下,我使用 ResolveUrl 助手(来自 MVCContrib 或者您可以自己编写):
$.load('<%= Url.ResolveUrl("~/Business/Tags") %>')
更新:
还可以为您的 JavaScript/jQuery 使用操作创建特殊控制器,使用 JavaScript 返回 PartialViews:
public ActionResult YourJavaScript()
{
Response.ContentType = "application/x-javascript";
return PartialView("YourJavaScript");
}
然后在 YourJavaScript.ascx 中,您可以使用带有 WebForms 服务器标签的 JavaScript/jQuery 代码。我仍然建议不要在 jQuery/AJAX 中使用几乎没有编码的 Urls
【讨论】:
我们在应用中执行此操作的几种方式:
var applicationPath = '<%= Url.Content("~/") %>';
或
var applicationPath = '<%= Request.Url.Scheme %>://<%= Request.Url.Host %><%= Request.ApplicationPath %>/';
然后我们使用 applicationPath 作为我们所有 ajax 调用的基本 url。
【讨论】:
我仍然建议在您的母版页中使用基本 href 标记。因此,任何图像或 javascript 调用都将从此 url 解析。这将允许您将 javascript 函数/调用放在外部 js 文件中。
【讨论】:
base是不正确的。基本 HREF 应该仅用于将相对 URI 解析为您所在的当前页面。通过以这种方式设置base,此页面上的所有 相对URI 将指向http://www.mysite.com/virtual_dir1/。