0

我有一个用户控件,它有一个网格视图、按钮和一个用于评论的多行文本框。

当页面回发时,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!";
   }
}

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

知道为什么会这样吗?

编辑

这是 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>
4

2 回答 2

1

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

编辑

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

    <user:MyUserControl runat="server" ID = "MyUserControl1" DepartmentID= '<%# Eval("DepID")%>'></user:MyUserControl>
    
  2. 无法直接访问中继器内的控件,您必须遍历中继器的行并找到您的子控件,然后尝试从它们中读取值,然后将一些数据绑定到中继器。

检查这个http://msdn.microsoft.com/en-us/magazine/cc163780.aspx

于 2013-02-14T20:40:49.187 回答
1

页面IsPostBack和每个用户控件IsPostBack是不一样的。

当一个用户控件被回发时,该特定控件IsPostBack为真,但其他用户控件IsPostBack仍然为假。

您可以!Page.IsPostBack在用户控件中显式使用来检查其父页面是否被回发。

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

动态加载的控件不能在 PostBack 处保持值? 它与您的问题没有直接关系,但它可能对您有用。

于 2013-02-14T21:01:55.817 回答