如何将变量添加到服务器端绑定

时间:2009-11-03 17:10:05

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

我的javascript代码如下所示:

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

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

&lt;%= Model.ElementAt('+ id +')。MailCount%&gt;不起作用。

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

3 个答案:

答案 0 :(得分:2)

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

1)简短的回答是,你无法完全按照自己的意思去做。

首先要理解的是服务器标签之间的代码&lt; %%&gt;只是服务器端代码。

标签......

<%=

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

Javascript&amp; jQuery代码只是客户端代码。

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


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

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

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

答案 1 :(得分: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];
}

答案 2 :(得分:0)

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

您必须将ajax调用回服务器,以便服务器端代码能够识别javascript值。

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

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