子页面a.aspx 嵌套在母版页master页面中,a.aspx页面中有个服务器端的控件, <asp:TextBox ID="TxtName" runat="server" ></TextBox>
 在页面的js中改变了TxtName的值,"ctl00$ContentPlaceHolder1$TxtName"是察看源代码的TxtName的ID值,从页面的显示的结果来看,该值是更新过的,但是在a.aspx页面中一个button的click事件中string Uname=TxtName.Text,却得不到TxtName更新过以后的值.不知道为什么,希望各位能给帮忙下! 

解决方案 »

  1.   

    要用ClientID,这样你无论怎么改变,都是可以引用的.
      

  2.   

    控件的属性是存储于viewstate中的,直接改无效吧
      

  3.   

    如果用了ClientID 会报错的,说是clientid 不是TextBox的有效属性...能稍微讲的详细点吗?
      

  4.   

    在客户端用代码 document.getElementById("TxtName").value = 'xxx';赋值,在服务器端接受是没有问题的,除非你在page_load里面又改变了控件的值
      

  5.   

    或许你可以试一下这个代替方案:
      1将a.aspx里面的 <asp:TextBox   ID="TxtName"   runat="server"   > </TextBox> 改成相应的html <input type="text"....>
        2取值时用string   Uname=Request.Form["TxtName"]
      

  6.   

    我在page_load()里面没有使用过该控件!
      

  7.   

    zoulang663这位兄弟的做法我试过了,不过结果还是有错,报Uname=Request.Form["TxtName"]这句:"未将对象的引用设置对象的实例",可能这和母版页有什么关系吗?
      

  8.   

    在masterPage里的话控件藏的比较深,要用递归才能找到控件
      

  9.   

    ID="TxtName"这个值为什么要改呢?为什么不用clientid?。改也是要改text(value)的值呀.
      

  10.   

    ctl00$ContentPlaceHolder1$TxtName -> UniqueID HTML的Name
    ctl00_ContentPlaceHolder1_TxtName -> ClientID HTML的IDjs用要ClientID
    Request.Form[控件ID.UniqueID]
      

  11.   

    很简单的问题,因为你改变值之后,点BUTTON 页面又刷新了一次,,,刷新的时候textbox的值被改变了
      

  12.   

    1、首先,你的问题提出时 <asp:TextBox   ID="TxtName"   runat="server"   > </TextBox> 标签就不对称。
    </TextBox> 应该改成</asp:TextBox>。
    2、我试过你的问题,不管有没有继承母版页,均可以得到被更新后的值。
    我的代码如下(先点击Button1,用js改变textBox的值,再点击Button2获得改变后的值):
    前台:
    <%@ Page Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="testWeb.WebForm1" %>
    <asp:Content ID="Content1" runat="server" contentplaceholderid="ContentPlaceHolder1">
        <script language="javascript" type="text/javascript">
        function test()
        {
            //document.getElementById("ctl00_ContentPlaceHolder1_txtTest").value="hahha";
            //建议采用下面的方法
            document.getElementById('<%=txtTest.ClientID%>').value="hahha";
        }
        </script>
        <asp:Label ID="Label1" runat="server"/>
        
        <asp:TextBox runat="server" Text="test" ID="txtTest" ></asp:TextBox>
        <asp:Button ID="Button1" runat="server" OnClientClick="test();return false;"  Text="Button" />
        &nbsp;&nbsp;&nbsp;
        <asp:Button ID="Button2" runat="server" Text="getValue" 
            onclick="Button2_Click" />
        <br />   
    </asp:Content>
    后台:
    protected void Button2_Click(object sender, EventArgs e)
    {
        this.Label1.Text = this.txtTest.Text;
    }
      

  13.   

    注意这句:
    <asp:Button   ID="Button1"   runat="server"   OnClientClick="test();return false;"     Text="Button"   /> 如果 你在点击Button1的时候还要在后台做其它操作,可以这么写:<asp:Button ID="Button1" runat="server" OnClientClick="test();"  Text="Button" onclick="Button1_Click" />
    protected void Button1_Click(object sender, EventArgs e)
    {
         string a = this.txtTest.Text;
    }
      

  14.   

    关于这个问题我也有些郁闷,前几天用用WEBSERVEICE做联动下拉菜单时就遇,只好用HIDDEN做个迂回。
    试试用HIDDEN保存吧。
      

  15.   

    恩,谢谢vickgu这位兄弟看的这么仔细,以及耐心的帮忙.也非常感谢楼上各位兄弟的帮忙,现在问题已经解决,现在就散点小分,虽然分数不多,但也代表小弟的一片心意.谢谢