<asp:TextBox ID="txt_TreeName" runat="server" onclick="txtOnclick(this);" onblur="GetInfo(this);" Width="95%" CssClass="edline" MaxLength="25"></asp:TextBox>//TextBox失去焦点事件调用GetInfo()   function GetInfo(txtName)//根据古树名称,获得隶属科属、拉丁文学名
    {
      var str=new Array();
      str=OldTree_OldTreeEdit.GetTxt(txtName.value).value;//OldTree_OldTreeEdit为后台类(运用ajax直接调用后台方法)
      if(str!=null)
      {
        document.all.txt_Subject.value=str[0];//科属
        document.all.txt_LatinName.value=str[1];//拉丁文学名
      }
      else
      {
        alert('sss');
        document.all.txt_Subject.value="";
        document.all.txt_LatinName.value="";
      }
    }
当我点击页面上的服务器控件,如“上传”按钮上传文件后,获取的科属、拉丁文学名清为空了,这是为什么??要怎样解决这个问题,请高手帮忙,谢谢!!

解决方案 »

  1.   

    页面回传的时候,asp.net只会恢复它"记忆"的东西,也就是viewstate里面的东西,你自己通过ajax获取值赋给相应html元素 但是没有改变它的viewstate 所以回发的时候 asp.net会清空你的控件.
    不过像 textbox(服务器)这样的控件经过js修改值以后他会更改过来,当然你要设置它的enableviewstate 为true了, 但是像label和其它一些控件你用js更改以后也没有用的
      

  2.   

    enableviewstate 为true
    不行,textbox的enableviewstate默认为true,但还是存在这个问题
      

  3.   

    txt_TreeName.Text=Request.Form[txt_TreeName.UniqueID]??txt_TreeName.Text;
      

  4.   

    我发现问题了,是因为我这两个textbox的readonly设置为true
    要从这方面考虑问题了...
      

  5.   

    readonly 为 true 的话, 
    在 LoadViewState 的时候 是不会给 textbox 赋值的
      

  6.   

    readonly 为 true 的话 用js先改变他的readonly为false然后再 改动他的value再改readonly为true就可以了      txtCCID.readOnly = false;
          txtCCID.value = Repairnbsp(currRow.cells[3].innerHTML);
          txtCCID.readOnly = true;我就是这么干的
      

  7.   

    雖然readonly,卻也可以從後端cs中給予值。