【问题标题】:ASP.NET MVC resolve urls in javascriptASP.NET MVC 在 javascript 中解析 url
【发布时间】:2009-05-28 20:30:50
【问题描述】:

我正在通过 jQuery.load('/Business/Tags') 加载一些内容,这在使用本地网络服务器时效果很好。但是当使用 iis 时,这并不能正确解决。我已经看到了几种不同的方法来解决这个问题,例如 ResolveUrl。在您的 javascript 中处理解析 url 的最佳方法是什么?

【问题讨论】:

    标签: jquery asp.net-mvc


    【解决方案1】:

    我的 JavaScript 遇到了这个确切的问题。由于我的 JavaScript 也在一个单独的文件中,该文件包含在我的母版页中,因此我无法使用 ResolveUrl。

    在我的案例中,这是我解决它的方法。我在顶部的母版页的 head 标记中包含了以下 JavaScript:

    <script type="text/javascript">
        var baseUrl = "<%= Request.Url.GetLeftPart(UriPartial.Authority) %>";
    </script>
    

    我正在设置一个名为 baseUrl 的所有 JavaScript 文件都可以访问的全局变量。

    您的代码将变为:

    jQuery.load(baseUrl + '/Business/Tags');
    

    【讨论】:

    • 我尝试了这种方法,但我没有得到我需要的东西,但我认为我可以使用它。我得到了这样的字符串“mtsengv003”,但我需要这样的字符串“mtsengv003/MVC”谢谢
    • 我认为最好使用: var baseUrl = "";
    • @eu-ge-ne:感谢您指出这一点。我的记忆和以前不一样了。你的代码很完美。
    【解决方案2】:

    我在可能的情况下使用带有 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

    【讨论】:

    • 如果您将所有 JavaScript 放在一个单独的文件中,然后在母版页中使用 Url.Content 引用此文件,则 Url.ResolveUrl 在您的 JavaScript 中将不起作用。如果我对此有误,请有人纠正我。
    【解决方案3】:

    我们在应用中执行此操作的几种方式:

     var applicationPath = '<%= Url.Content("~/") %>';
    

     var applicationPath = '<%= Request.Url.Scheme %>://<%= Request.Url.Host %><%= Request.ApplicationPath %>/';
    

    然后我们使用 applicationPath 作为我们所有 ajax 调用的基本 url。

    【讨论】:

      【解决方案4】:

      我仍然建议在您的母版页中使用基本 href 标记。因此,任何图像或 javascript 调用都将从此 url 解析。这将允许您将 javascript 函数/调用放在外部 js 文件中。

      【讨论】:

      • 我真的很喜欢这种方法。如此干净,只需要很少的努力。谢谢
      • 这绝对是一个务实的解决问题的方法,但是这样使用base是不正确的。基本 HREF 应该仅用于将相对 URI 解析为您所在的当前页面。通过以这种方式设置base,此页面上的所有 相对URI 将指向http://www.mysite.com/virtual_dir1/
      猜你喜欢
      • 2011-10-02
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      相关资源
      最近更新 更多