为什么多行文本框(在用户控件内)在回发后没有保持其值?

时间:2013-02-14 20:36:13

标签: asp.net user-controls

我有一个用户控件,它有一个gridview,按钮和一个用于注释的多行文本框。

当页面回发时,Gridview 行为正常(其控件在回发后保持其值)。但是,无论我做什么,评论文本框始终为空。

protected void Page_Load(object sender, EventArgs e)
{
   //This code is in the user ciontrol.
  if (!IsPostBack)
   {
     string test = this.txtDepartmentComments.Text;
   }

}

我在该行设置了一个断点,值始终为空。我也尝试将代码中的值设置为:

protected void Page_Load(object sender, EventArgs e)
{
   //This code is in the user ciontrol.
   if (!IsPostBack)
   {
     this.txtDepartmentComments.Text = "Test!";
   }
}

但是当页面加载时,控件仍为空。

知道为什么这是hapenning?

修改

这是ascx代码(即用户控件)

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns = "false" >
</asp:GridView>

<asp:TextBox ID="txtComments" runat="server" Columns="45" TextMode= "MultiLine"/>
 <asp:Button ID="btnComplete" runat="server" Text="Completed"/>

并且id为aspx(即父页面)

<asp:Repeater ID="rpNewHire" runat="server">
       <HeaderTemplate>
        <table>            
       </HeaderTemplate>
       <ItemTemplate>
        <tr>
            <td>
                <user:MyUserControl ID = "MyUserControl1" runat = "server" 
                 DepartmentID= '<%# Eval("DepID")%>'><user:MyUserControl />
            </td>
        </tr>
       </ItemTemplate>
       <FooterTemplate>
        </table>
       </FooterTemplate>
    </asp:Repeater>

2 个答案:

答案 0 :(得分:1)

如果(!IsPostBack)用于在回发后从控件读取值,则您尝试在初始加载时读取文本框值,该值始终为空,删除“!”从你的条件。此外,很难通过aspx页面内容调试您的问题,尝试在您的问题中发布设计部分。

修改

  1. 您的用户标记在转发器中格式不正确,缺少结束标记和runat属性

    <user:MyUserControl runat="server" ID = "MyUserControl1" DepartmentID= '<%# Eval("DepID")%>'></user:MyUserControl>
    
  2. 无法直接访问内部转发器中的控件,您必须遍历转发器的行并找到您的子控件,然后尝试从它们读取值,即将一些数据绑定到转发器之后。
  3. 选中此http://msdn.microsoft.com/en-us/magazine/cc163780.aspx

答案 1 :(得分:1)

Page IsPostBack并且每个用户控制&#39; IsPostBack不一样。

当回发用户控件时,该特定控件IsPostBack为真,但其他用户控件&#39; IsPostBack仍然是假的。

您可以在用户控件中明确使用!Page.IsPostBack来检查其父页是否已回发。

if(!Page.IsPostBack){
   // do something
}

Dynamically Loaded Control can not maintain values at PostBack?这与您的问题没有直接关系,但它可能对您有用。