读书人

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

发布时间: 2013-04-20 19:43:01 作者: rapoo

菜鸟求救。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事件来更改被选中的个数。

读书人网 >C#

热点推荐