我正在工作的地方有一个现有的页面,ascx中有一个复选框,它的.cs中有一个CheckedChange事件。我在该页面遇到的问题是,当我运行网站并选中该框,它永远不会触发事件,而是通过On_Load事件并且它永远不会传递事件......我不确定为什么它不会触发事件......
<asp:CheckBox runat="server" ID="OptionSelected"
OnCheckedChanged="OptionSelected_CheckedChanged"
AutoPostBack="true" />
<asp:Label runat="server" ID="OptionHeader"></asp:Label>
protected void OptionSelected_CheckedChanged(object sender, EventArgs e)
{
//some code here
}
PS:这是一个控件ascx抱歉,我忘了提。另一个症状是该控件的页面......它会意外刷新,清除一些数据(如果选中它则包括复选框)并且无法找出导致它的原因。
有关为什么会发生这种情况的任何想法?我应该寻找的东西?
public PortalInfoPortal myPortal
{
get
{
return portal.GetPortalInfo();
}
}
protected void Page_Load(object sender, EventArgs e)
{
//added this an nothing
OptionSelected.CheckedChanged += new EventHandler(OptionSelected_CheckedChanged);
if (myPortal != null)
{
lblOptionMsg.Text = "(" + myPortal.MaxOptionSelectedCharacters.ToString() + " char max)";
txtMessage.MaxLength = myPortal.MaxOptionSelectedCharacters;
var maxLength = myPortal.MaxOptionSelectedCharacters;
maxCheck.ValidationExpression = @"^[\s\S]{0," + maxLength.ToString() + "}$";
}
//There is no binding of any type here
}
答案 0 :(得分:3)
您需要启用viewstate以更改事件。 viewstate是服务器如何知道页面最初提供时以及返回之前控件的状态。没有这些信息,它不知道值是否已经改变。检查您是否启用了viewstate。
答案 1 :(得分:0)
您是否可以创建usercontrol(使用Page.LoadControl()
)并将其动态添加到控制树中,然后忘记每次回发都需要执行这些步骤?否则,回发中不再存在用户控件,并且不会触发任何事件。