代码之家  ›  专栏  ›  技术社区  ›  Paul

在.NET MVC中获取服务器值到JavaScript的最佳方法?

  •  1
  • Paul  · 技术社区  · 16 年前

    使用 ASP.NET MVC + jQuery :

    我需要在客户端使用服务器拥有的一些值 JavaScript .

    现在,我在实际视图中临时得到了一个脚本标记,如下所示:

    <script>
    var savePath = '<%= Url.Action("Save") %>';
    </script>
    

    但我想把它变成更干净、更可维护的东西。我正在考虑创建一个javascript控制器/操作并返回 JSON 对象,它将包含我需要的所有数据,然后使用视图作为脚本标记的SRC。

    还有其他想法吗?

    3 回复  |  直到 13 年前
        1
  •  2
  •   Peter Mortensen Pieter Jan Bonestroo    16 年前

    这要看情况而定。对于简单的inliner,上面的行工作得很好。如果在 JavaScript ,您的视图方法可能有效。但是,如果只呈现输出所需javascript的部分视图,则会得到相同的结果。

    这有一个问题,因为最终可能会将服务器数据与JavaScript混合在一起。最好的方法是将服务器数据最小化到绝对最小,并将其传递给JavaScript函数,而不是与JavaScript代码混合。那是,不是

    function func() {
      var path = '<%= Url.Action("my") %>';
      $(".selector").append("<img src='" + path + "' />");
    }
    

    但是

    function AppendImageToSelector(path) {
      $(".selector").append("<img src='" + path + "' />");
    }
    
    function func() {
      var path = '<%= Url.Action("my") %>';
      AppendImageToSelector(path);
    }
    

    这使得代码更清晰、更容易理解,有助于将javascript移出单独的.js文件,有助于在需要时重用javascript,等等。

    如果您在javascript中需要大量与服务器相关的URL,您可能需要创建全局(在母版页中)函数,例如

    function url(relative) {
       return '<%= Url.Content("~") %>' + relative;
    }
    

    从javascript脚本中使用它。不过,这种技术还是有问题的;例如,它不使用MVC路由规则,因此URL可能不同步;等等。

        2
  •  1
  •   Darin Dimitrov    16 年前

    我知道这并不适用于所有情况,但是当我需要将一个URL传递给一个客户机脚本(如您的示例中所示)时,通常需要将我在DOM中已有的某个锚或按钮半开:

    <%= Html.ActionLink("Save data", "save") %>
    

    在我的剧本里:

    $('a').click(function() {
        $.get(this.href);
        return false;
    });