【问题标题】:How to add variable to server-side binding如何将变量添加到服务器端绑定
【发布时间】:2009-11-03 17:10:04
【问题描述】:

我的 javascript 代码如下所示:

$('#lnkPopup').click(function()
{
    var id = $(this).attr('rel');

    var msgCount = '<%= Model.ElementAt('+id+').MailCount %>';
});

不起作用。

那么我如何将 javascript 变量添加到服务器端查询呢?

【问题讨论】:

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


    【解决方案1】:

    有两种方法可以回答这个问题。

    1) 简短的回答是您不能完全按照您的尝试去做。

    首先要了解的是,服务器标签之间的代码只是服务器端代码。

    标签...

    <%=
    

    ...表示服务器将生成输出并将结果发送给客户端。

    Javascript 和 jQuery 代码仅是客户端代码。

    所以你的 javascript / jQuery 不能直接与服务器端代码交互。但是,您可以从服务器端生成客户端代码。


    2) 我们如何从客户端代码中获取一个值到服务器端?

    有几种方法可以解决这个问题,这取决于您为 Web 应用程序选择的样式以及手头的问题。

    • 发布或获取到 URL - 这可能是 使用 AJAX 执行。
    • 生成javascript/jQuery代码 你需要在服务器上,所以你不需要 需要“回帖”。

    【讨论】:

    • 我就是这么想的。当数据已经位于我的视图模型中时,发出 ajax 请求似乎是一种浪费。必须有另一种方式。
    【解决方案2】:
    var mailCountTable = {};
    <% foreach (var id in Model.Ids) { %>
      elementTable['<%= id $>'] = '<%= Model.ElementAt(id).MailCount %>';
    <% } %>
    
    $('#lnkPopup').click(function()
    {
        var id = $(this).attr('rel');
        var msgCount = mailCountTable[id];
    });
    

    或者,您可以使用 $.getJSON 获取您的 mailCountTable。或者,使用延迟加载:

    function getMailCount(id) {
      if (mailCountTable.length == 0)
          $.ajax({async: false, url: '/mailcounttable', format: 'json', 
                 success: function(data) { mailCountTable = data; } });
      return mailCountTable[id];
    }
    

    【讨论】:

    • 我最终做了这样的事情。
    【解决方案3】:

    基本上,你不会。服务器代码将在服务器上执行,早在 javascript 在客户端上执行之前。

    您必须对服务器进行 ajax 回调,以便服务器端代码知道 javascript 值。

    或者,您可以使用服务器端代码编写包含元素和邮件计数的 javascript 哈希表。然后,该函数可以在执行时在该哈希表中查找它的值。

    有很多方法可以解决这个问题,要理解的关键概念是,当javascript执行时,你的服务器代码已经完成,所以你最好将所有数据都放在页面上,或者用ajax回调服务器。

    【讨论】:

      猜你喜欢
      • 2014-09-05
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      相关资源
      最近更新 更多