【问题标题】:Best way to get server values into JavaScript in .NET MVC?在 .NET MVC 中将服务器值转换为 JavaScript 的最佳方法?
【发布时间】:2009-11-02 18:48:16
【问题描述】:

使用ASP.NET MVC + jQuery

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

现在,我在实际视图中暂时有一个脚本标签,如下所示:

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

但我想把它移到更干净、更易于维护的地方。我正在考虑创建一个 JavaScript 控制器/动作并返回一个包含我需要的所有数据的 JSON 对象,然后将视图用作脚本标记的 src。

还有其他想法吗?

【问题讨论】:

    标签: javascript asp.net .net asp.net-mvc


    【解决方案1】:

    这实际上取决于。对于简单的内联,上面的行就可以了。如果您需要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】:

      我知道这并不适用于所有情况,但是当我需要将 Url 传递给客户端脚本(如您的示例中)时,通常是对 DOM 中已有的一些锚点或按钮进行 ajaxify:

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

      在我的脚本中:

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

      【讨论】:

      • 我猜这就是他们所说的“不显眼”的javascript。请注意,可以使用其他属性;例如,cueTip jQuery 插件使用 rel 作为工具提示 URL。
      • 是的,它被称为unobtrusive javascriptprogressive enhancement
      【解决方案3】:
      猜你喜欢
      • 1970-01-01
      • 2014-04-18
      • 2023-03-15
      • 2020-07-09
      • 1970-01-01
      • 2023-03-26
      • 2014-04-06
      • 2011-01-14
      • 2012-04-15
      相关资源
      最近更新 更多