在调试Ajaxpro结合GridView的时候,出现了奇怪的函数调用的问题
代码如下
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;namespace LoadGridView
{
    public partial class Default6 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            AjaxPro.Utility.RegisterTypeForAjax(typeof(Default6));
        }
        [AjaxPro.AjaxMethod]
        public int AddAjaxTable(string name)
        {
            string strcon = "server=.;database=AjaxTable;uid=sa;pwd=lanjie";
            SqlConnection con = new SqlConnection(strcon);
            con.Open();
            SqlCommand com = new SqlCommand();
            com.CommandText = "insert into Ajaxtt values('" + name + "')";
            com.Connection = con;
            int result=com.ExecuteNonQuery();
            con.Close();
            com.Dispose();
            return result;
        }
        [AjaxPro.AjaxMethod]
        public string GetAjaxTable(int a )
        {
            string strcon = "server=.;database=AjaxTable;uid=sa;pwd=lanjie";
            SqlConnection con = new SqlConnection(strcon);
            con.Open();
            SqlCommand com = new SqlCommand();
            com.CommandText = "select * from Ajaxtt";
            com.Connection = con;
            SqlDataAdapter dra = new SqlDataAdapter();
            dra.SelectCommand = com;
            DataSet ds = new DataSet();
            dra.Fill(ds, "Ajaxtt");
            con.Close();
            com.Dispose();
            GridView GV = new GridView();
            GV.DataSource = ds;
            GV.DataBind();
            System.Text.StringBuilder strb = new System.Text.StringBuilder();
            System.IO.StringWriter sw = new System.IO.StringWriter(strb);
            System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);
            GV.RenderControl(htw);
            string s = strb.ToString();
            return s;
        }
    }
    
}
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default6.aspx.cs" Inherits="LoadGridView.Default6" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>邦定GridView</title>
    <script language=javascript>
    function AddAjax()
    {
     var name=document.getElementById("nametext").value;
     LoadGridView.Default6.AddAjaxTable(name,CallBack);
       // LoadGV();  
             
    }
    function LoadGV()
    {
      LoadGridView.Default6.GetAjaxTable(1,CallServerBack);     
    }
    function CallServerBack(res)
    {
     var cc=document.getElementById("Gv");
     cc.innerHTML=res.value;
    }
    function CallBack(ss)
    {
       if(ss.value!=0)
       {
        LoadGV();
       }
    }
    </script>
</head>
<body onload="LoadGV();">
    <form id="form1" runat="server">
    <input type="text" id="nametext"/>
    <input type="button" value="AjaxButton" onclick="AddAjax();" />
    <div id="Gv">
    
    </div>
    </form>
</body>
</html>
这是出问题的代码,如果js代码改写成下面就可以了,
<script language=javascript>
    function AddAjax()
    {
     var name=document.getElementById("nametext").value;
     LoadGridView.Default6.AddAjaxTable(name);
     LoadGV();  
             
    }
    function LoadGV()
    {
      document.getElementById("nametext").innerHTML=LoadGridView.Default6.GetAjaxTable(1).value;     
    }
    
    </script>
那么这是怎么回事呢?

解决方案 »

  1.   

    看不出问题来,唯一的不同就是第二种没有判断if(ss.value!=0)
      

  2.   

    Ajax回调响应函数内不能嵌套调用ajax回调响应函数,若要嵌套调用请用window.settimeout延时执行
      

  3.   

    谢谢,你说的对,我又想到一个办法了,回调函数如果不在一个类里面,可以嵌套。还是非常的感谢你的提示!不过暂时我还不能结贴,明天我去装个fireFox结贴,ie7不能结贴,老是提示脚本错误!