代码如下:有两个问题,一个是gridivew里的选取没有作用,linkbtnSales_Click里的alert没有弹出来;
另一个问题很奇怪,整个语句里只有一个textbox控件:ID="txtitemnum",运行的时候在txtitemnum里输入字母页面会出现两个textbox,这也太诡异了吧,稍微贴运行后的源文件<%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server">
    
    protected void Page_Load(object sender, EventArgs e)
    {
        string id = Request.QueryString["id"];
        if (Request.QueryString["id"] != null)
        {
            Response.ClearContent();
            string sql =  "select distinct 成品代码,成品名称 from aaa where 成品代码='" + id + "'";                zs.Open(sql);
                    GvData.DataSource = zs.m_table;
                    GvData.DataBind();
                zs.Close();
        }
    }    protected void linkbtnSales_Click(object sender, EventArgs e)
    {
        string id = (sender as LinkButton).CommandArgument;
        Response.Write("<script>alert(id);<"+"/script>");
    }
</script><html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
  <title>使用 AJAX,局部刷新 GridView 进行数据绑定的简单实现</title>
  <script type="text/javascript">
      function GetData() {
          document.getElementById("d").innerHTML = "正在读取数据……";
          h = window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP");
          var id = document.getElementById("<%=txtitemnum.ClientID%>").value;
          h.open("GET", '<%=Request.FilePath %>?id=' + id, true);
          h.onreadystatechange = function () {
              if (h.readyState == 4) {
                  if (h.status >= 200 && h.status < 300) {
                      document.getElementById("d").innerHTML = h.responseText;
                  }
                  else {
                      document.getElementById("d").innerHTML = "<h2>数据操作错误:</h2>" + h.responseText;
                  }
              }
          }
          h.send(null);
      }
      alert("这个提示,只出现在第一次打开页面。");
  </script>
</head>
<body>
  <form id="form1" runat="server">
    <asp:TextBox ID="txtitemnum"  onkeyup="GetData()" runat="server" ></asp:TextBox>
    
    <asp:GridView ID="GvData" runat="server" Width="99%" AutoGenerateColumns="False"
            CssClass="gridview" EmptyDataText="没有数据" >
            <PagerSettings Visible="False" />
            <Columns>
                <asp:BoundField HeaderText="成品代码" DataField="成品代码" ><ItemStyle HorizontalAlign="Center" /></asp:BoundField> 
                <asp:BoundField HeaderText="成品名称" DataField="成品名称" ><ItemStyle HorizontalAlign="Center" /></asp:BoundField>
                <asp:TemplateField HeaderText="选取"><ItemTemplate><asp:LinkButton ID="linkbtnSales" CommandArgument='<%#Eval("成品代码")+"|"+Eval("成品名称")%>' runat="server" OnClick="linkbtnSales_Click"  ForeColor="Red">选取</asp:LinkButton></ItemTemplate><ItemStyle HorizontalAlign="Center" /></asp:TemplateField>
                </Columns>
             <RowStyle Height="25px" />
            <EmptyDataRowStyle ForeColor="Red" HorizontalAlign="Center" />
    </asp:GridView>
  </form>
  <div id="d"></div>
</body>
</html>
以下是编译后,在页面上查看源文件得到的信息:
请各位大侠帮忙看看这是怎么回事啊。
<!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 id="Head1"><title>
使用 AJAX,局部刷新 GridView 进行数据绑定的简单实现
</title>
  <script type="text/javascript">
      function GetData() {
          document.getElementById("d").innerHTML = "正在读取数据……";
          h = window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP");
          var id = document.getElementById("txtitemnum").value;
          h.open("GET", '/Default2.aspx?id=' + id, true);
          h.onreadystatechange = function () {
              if (h.readyState == 4) {
                  if (h.status >= 200 && h.status < 300) {
                      document.getElementById("d").innerHTML = h.responseText;
                  }
                  else {
                      document.getElementById("d").innerHTML = "<h2>数据操作错误:</h2>" + h.responseText;
                  }
              }
          }
          h.send(null);
      }
      alert("这个提示,只出现在第一次打开页面。");
  </script>
</head>
<body>
  <form name="form1" method="post" action="Default2.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTIwMDc1MDIyNA9kFgICBA9kFgICAw88KwARAQEQFgAWABYAZBgBBQZHdkRhdGEPZ2Sg5y1OhV1KqPNgC2h+1aFt7hbm5a7uMz4QvSomw5H/rw==" />
</div><div> <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgKW04b0AwLS5pKnCH62TDczY1HGDVGqYbAC3Q1U78XgFvI/ISmH90/VeAr/" />
</div>
    <input name="txtitemnum" type="text" id="txtitemnum" onkeyup="GetData()" />
    
    <div></div>
  </form>
  <div id="d"></div>
</body>
</html>

解决方案 »

  1.   

      alert("这个提示,只出现在第一次打开页面。");你这句话就没放到GetData方法块里,可不就执行一次。/至于你说什么两个TEXTBOX,没看明白你啥意思  但源码没问题<input name="txtitemnum" type="text" id="txtitemnum" onkeyup="GetData()" />就这么一个~
      

  2.   

    我指的alert是这个  Response.Write("<script>alert(id);<"+"/script>");两个textbox这个真的很诡异,编译运行的时候整个页面的布局是就最上面有一个textbox(也就是id="txtitemnum"),因为gridviwe没有数据所以不会有显示。
    一旦在txtitemnum里输入任意字符,会在txtitemnum的下方再出现一个textbox控件,gridview里因为有数据了,所以也显示出来了ps,这里怎么贴图啊?
     
      

  3.   

    linkbtnSales这个东西要自动回发才能触发事件有个属性是AUTOPOSTBACK启用就可以了!我已经许久没用过.NET的原生控件了你自己翻翻看
      

  4.   

    知道你说的是什么意思了。。responseText这个里边包含的代码是你请求页面所有的HTML代码,你把那些东西都放到一个DIV里当然就会多出一个TEXTBOX了。关于这个 你最好做一个单独的ASCX页面,里边只有一个DATAGRID的内容,这样就可以了
      

  5.   


    linkbtnSales这个是gridview里的一个linkbutton·没有AUTOPOSTBACK属性啊
      

  6.   

    求解,怎么调用linkbtnSales_Click啊