2013-02-14 45 views
0

我有一个用户控件,它有一个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!"; 
    } 
} 

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

任何想法,为什么这是头痛?

编辑

这个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"/> 

而且THID 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> 

回答

1

如果(!的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

+0

如果(!IsPostback)已添加/删除,但结果保持不变。 – Richard77 2013-02-14 20:48:18

1

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

当用户控件回发时,该特定控件的IsPostBack为true,但其他用户控件的IsPostBack仍然为false。

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

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

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

+0

我现在感到困惑。大声笑!正如你在上面发布的代码中看到的那样,评论文本框位于用户控件内部,用户控件又位于中继器内。当页面发回时,为什么评论文本框在后面的代码中始终是空的?检查IsPostBack或Page.IsPostBack,没有任何区别。输入内容时,文本框仍为空。 – Richard77 2013-02-14 22:09:26

+0

无论如何,即使当我输入内容时,回发后文本框也会变空。 – Richard77 2013-02-14 22:10:33

+0

你能替换!IsPostBack与!Page.IsPostBack并且看看会发生什么?如果它仍然没有工作,你可以发布GridView1如何填充数据吗? – Win 2013-02-14 22:26:23

相关问题