我正在通过jQuery.load('/ Business / Tags')加载一些内容,这在使用我的本地网络服务器时效果很好。但是当使用iis时,这无法正确解决。我已经看到了几种不同的解决方法,比如ResolveUrl。在javascript中处理解析网址的最佳方法是什么?
答案 0 :(得分:18)
我用JavaScript遇到了这个问题。由于我的JavaScript也在我的母版页中包含的单独文件中,因此我无法在我的案例中使用ResolveUrl。
以下是我在案例中解决的问题。我在顶部的母版页中的头标记中包含了以下JavaScript:
<script type="text/javascript">
var baseUrl = "<%= Request.Url.GetLeftPart(UriPartial.Authority) %>";
</script>
我正在设置一个全局变量,可供我所有名为baseUrl的JavaScript文件访问。
您的代码将成为:
jQuery.load(baseUrl + '/Business/Tags');
答案 1 :(得分:5)
至于我,我正在使用Url.Action / Url.RouteUrl帮助程序使用JavaScript / jQuery:
$.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中,您可以将JavaScript / jQuery代码与WebForms服务器标记一起使用。我仍然建议不要在jQuery / AJAX中使用难以编码的Urls
答案 2 :(得分:2)
我们在应用中采用以下几种方式:
var applicationPath = '<%= Url.Content("~/") %>';
OR
var applicationPath = '<%= Request.Url.Scheme %>://<%= Request.Url.Host %><%= Request.ApplicationPath %>/';
然后我们使用applicationPath作为所有ajax调用的基本URL。
答案 3 :(得分:1)
我仍然建议您在母版页中使用base href标签。因此,任何图像或JavaScript调用都将从此网址解析。这将允许您将javascript函数/调用放在外部js文件中。
<html> <head> <base href="http://www.mysite.com/virtual_dir1/"> <script src="location_of_js_file">
记住基础href中的结尾'/'。
此外,删除前导'/'并且无论何时执行jQuery.load('Business / Tags'),它实际上都来自http://www.mysite.com/virtual_dir1/Business/Tags。