【问题标题】:Use Razor in Jquery在 Jquery 中使用 Razor
【发布时间】:2013-03-30 03:48:25
【问题描述】:

我正在编写如下所示的 AJAX 调用:

 <script type="text/javascript">
                            $(function () {
                            $.ajax({
                              url: @(Url.Action("_ModulePartial", "Home")),
                              dataType: 'html',
                              success: function(data) {
                                 $('#_ModulePartial').html(data);
                              },
                           });
                         });
                        </script>
            }

我想使用 Url.Action 在默认区域的 Home 控制器中调用 _ModulePatial 动作

<script type="text/javascript">
                                    $(function () {
                                    $.ajax({
                                      url: /Home/_ModulePartial,
                                      dataType: 'html',
                                      success: function(data) {
                                         $('#_ModulePartial').html(data);
                                      },
                                   });
                                 });
                                </script>
                    }

/Home/_ModulePartial 工作正常,但我想使用 @Url.Action 来实现这一点,因为我们有 2 个不同的 URl http://TestUrl.com/Test/User/Login 和 http://TestUrl.com/User/Login 所以上面的 Url 将无法工作服务器之一。由于第一个 Url 包含“Test”,因此无法找到 Home 控制器。

那么我们可以在 Jquery 中使用 Url.Action 吗?

Firebug 给出这个错误

SyntaxError: missing } after property list
[Break On This Error]   

url: /Home/_ModulePartial,

在第一个脚本中尝试使用 @Url.Action 调用时

【问题讨论】:

    标签: jquery asp.net-mvc-4 url.action


    【解决方案1】:

    您需要在 ajax 调用中包含区域名称,并且必须这样做:

    '@Url.Action("_ModulePartial", "Home", new { area = "Test" })'
    

    这是完整的 ajax 调用:

    <script type="text/javascript">
        $(function () {
            $.ajax({
                url: '@Url.Action("_ModulePartial", "Home", new { area = "Test" })',
                    dataType: 'html',
                    success: function(data) {
                        $('#_ModulePartial').html(data);
                    },
                });
        });
    </script>
    

    另外,请确保脚本标记后多余的“}”只是复制粘贴错误。

    【讨论】:

      【解决方案2】:

      知道了... :)

      只需使用单引号。它有效

      <script type="text/javascript">
                                  $(function () {
                                  $.ajax({
                                    url: '@(Url.Action("_ModulePartial", "Home"))',
                                    dataType: 'html',
                                    success: function(data) {
                                       $('#_ModulePartial').html(data);
                                    },
                                 });
                               });
                              </script>
                  }
      

      【讨论】:

      • 要对此进行扩展,请记住,在将页面发送到客户端之前,Razor 等 ASP.NET 调用是在服务器级别执行的。您正在做的是为服务器注入的文本设置占位符。页面发送到客户端后,占位符文本将已更改。 jQuery 是一种客户端语言,由浏览器解释。所有服务器端代码都将被替换,浏览器只会看到 ASP.NET 调用的结果。我希望这是有道理的。
      猜你喜欢
      • 2019-05-14
      • 2017-07-31
      • 1970-01-01
      • 2021-07-11
      • 2017-09-19
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多