js代码:
<script type="text/javascript" language="javascript">
        var del= '#<%= del.ClientID %>';
        $(document).ready(function () {
            $(del).click(function () { return Check(); });
            function Check() {
                if (typeof (Page_IsValid) == 'boolean' && !Page_IsValid) {                    return;
                } else {
                    var count = " <%=checkCount()%>";
                    alert(count);
                }
                var checkFlg = true;
            }
        });
    </script>
cs里面的方法:
public int checkCount()
        {
            System.Web.UI.WebControls.CheckBox chkExport;
            System.Web.UI.WebControls.Label loginLabel;
            List<string> loginList = new List<string>();
            for (int i = 0; i < this.gdvData.Items.Count; i++)
            {
                chkExport = (System.Web.UI.WebControls.CheckBox)this.gdvData.Items[i].FindControl("check2");
                loginLabel = (System.Web.UI.WebControls.Label)this.gdvData.Items[i].FindControl("loginLabel");
                if (chkExport.Checked)
                {
                    string temp = loginLabel.Text;
                    loginList.Add(temp);
                }
            }
            return loginList.Count;
        }
目的就是在点del按钮的时候判断listview里面checkbox选中的个数。现在是在页面初期化的时候,第一次调用了checkcount方法。接着选中2个checkbox。点击del按钮。为什么js里面是先alert再执行checkcount方法?菜鸟很是不明。怎么弄成先checkcount再alert啊。求救啊。。ASP

解决方案 »

  1.   

    我的理解是这样的,JS执行到调用方法的这一块,不会等到cs中的方法执行完了再执行后面的JS代码,所以在执行到alert的时候cs中的方法还没有执行完成,就出现了先alert后方法。解决的方法就是根据cs方法的返回值来决定后面JS的执行。不知道这样理解是否正确,求大婶指正。
      

  2.   

    这个地方可以用ajax去后台把数据取回来,赋给count,去找找ajax的例子看看
      

  3.   

    LZ可能还没明白服务器端代码和客户端代码的区别。服务器端的输出方法只有在页面生成的时候才会运行。即你的checkCount()的返回值在页面生成的过程中就已经确定了。你可以右键查看源码,会发现你html代码中中不再有 '#<%= del.ClientID %>和<%=checkCount()%>,取而代之的是在生成的时候这2个对应的值。所以你alert的值会是你页面生成的时候的值。至于你觉得checkCount()方法是在alert后再执行的,是因为你的删除按钮是一个服务器控件,点击后它会先执行自己的客户端函数再响应它的服务器端点击事件(通过页面PostBack),页面与服务器交互之后重新生成页面,再次调用到了checkCount()方法。如果你想打出loginList的个数或者说是CheckBox被选中的个数,你可以在后台删除方法调用完后注册一个js来alert这个数量。参考
      string js = @"<Script language='JavaScript' type='text/javascript'>
                        alert('" + checkCount().ToString() + "');</Script>";
    this.ClientScript.RegisterStartupScript(typeof(string),"Tips",js,false);或者直接通过js来获取checkbox选中的个数,你也可以在gdvData初始化时给每个item中的checkbox注册一个onclick事件来更改被选中的个数。
      

  4.   

    其这个地方实用不到ajax,实际上被选中的个数就在当前页面上就可以获取,不需要与服务器交互。只是服务器端有对应的方法可以用来查找checkbox控件,实际上在客户端也是完全可以找到这些checkbox的。写web应用经常在浏览器中看看源代码你会明白很多服务器端控件是怎么运作的。
      

  5.   


    我的那个checkbox是listview里面的:
    <ItemTemplate>
            <tr class='<%# (Container.DataItemIndex % 2 == 0)?"even":"odd" %>'>
                <td><asp:CheckBox  ID="check2" runat="server" /></td>
                <td align="center" >
                <asp:Label runat="server" ID="loginLabel" Text='<%#Eval("loginid")%>' />
                </td>
                <td align="center">
                     <%#Eval("nickname")%>
                </td>
              </tr>
    </ItemTemplate>
    是在页面load的时候根据db数据动态生成的。在页面上实在不知道怎么获取,才想到从后台弄的。大神知道这样的话,页面怎么可以获取到每个checkbox的状态么?
      

  6.   

    看你的代码你的listview应该是叫gdvData,你通过var DataId= '#<%= gdvData.ClientID %>';获取到你的listview的id,然后去遍历这个表的每行中的CheckBox就可以了,可参考
    var DataId= '#<%= gdvData.ClientID %>'
         var tbl=$("#DataId");
         var trlist=tbl.find("tr");
         for(var i=1;i<trlist.length;i++)
         {
             var tr=$(trlist[i]);
             var input=tr.find("INPUT[type='checkbox']");
             ......
         }
      

  7.   

    用了你的方法,debug时候发现trlist的length是0么。
      

  8.   

    哦 手误。var tbl=$("#DataId");应该是var tbl=$(DataId);
      

  9.   

    额。我一会再试试看。。jquery也不懂。。