我有一个用户控件,它有一个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>
答案 0 :(得分:1)
如果(!IsPostBack)用于在回发后从控件读取值,则您尝试在初始加载时读取文本框值,该值始终为空,删除“!”从你的条件。此外,很难通过aspx页面内容调试您的问题,尝试在您的问题中发布设计部分。
修改强>
您的用户标记在转发器中格式不正确,缺少结束标记和runat属性
<user:MyUserControl runat="server" ID = "MyUserControl1" DepartmentID= '<%# Eval("DepID")%>'></user:MyUserControl>
答案 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?这与您的问题没有直接关系,但它可能对您有用。