首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

初学者。ASP页面js调用cs里面方法的有关问题

2013-04-20 
菜鸟求救。ASP页面js调用cs里面方法的问题。js代码:script typetext/javascript languagejavascript

菜鸟求救。ASP页面js调用cs里面方法的问题。
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
[解决办法]
我的理解是这样的,JS执行到调用方法的这一块,不会等到cs中的方法执行完了再执行后面的JS代码,所以在执行到alert的时候cs中的方法还没有执行完成,就出现了先alert后方法。解决的方法就是根据cs方法的返回值来决定后面JS的执行。不知道这样理解是否正确,求大婶指正。
[解决办法]
这个地方可以用ajax去后台把数据取回来,赋给count,去找找ajax的例子看看
[解决办法]
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事件来更改被选中的个数。

热点排行