我有一个包含一些文本框和一个按钮的 WebControl。一切都显示得很漂亮。单击按钮时,我需要服务器对文本框的内容做一些事情。为了在回发后保留文本框的内容,我将文本框和按钮放在单独的 UpdatePanel 中,并将它们的 UpdateMode 设置为 UpdatePanelUpdateMode.Conditional。我不需要在页面中处理这个事件;我总是希望 WebControl 中定义的 btnSubmit_Click 事件在单击按钮时执行。
我认为这比引发包含 Page 处理的事件更容易,但是唉!到目前为止,我无法触发该事件。我在这里做错了什么?
public class EditUserSettings : WebControl
{
private TextBox txtShort_name;
private TextBox txtServco_No;
private TextBox txtEmp_No;
private Button btnSubmit;
private UpdatePanel pnlControls;
private UpdatePanel pnlButton;
protected override void CreateChildControls()
{
txtShort_name = new TextBox();
txtServco_No = new TextBox();
txtEmp_No = new TextBox();
btnSubmit = new Button();
pnlControls = new UpdatePanel();
pnlButton = new UpdatePanel();
pnlControls.UpdateMode = UpdatePanelUpdateMode.Conditional;
pnlButton.UpdateMode = UpdatePanelUpdateMode.Conditional;
btnSubmit.Text = "Submit";
btnSubmit.CssClass = "btn btn-primary btn-large";
btnSubmit.Click += new EventHandler(btnSubmit_Click);
txtShort_name.Text = HttpContext.Current.Profile["Short_name"].ToString();
txtServco_No.Text = HttpContext.Current.Profile["Servco_No"].ToString();
txtEmp_No.Text = HttpContext.Current.Profile["Emp_No"].ToString();
Panel pnlRow1 = new Panel();
Panel pnlRow2 = new Panel();
Panel pnlContainer = new Panel();
pnlRow1.CssClass = "row";
pnlRow2.CssClass = "row";
pnlContainer.CssClass = "span12";
pnlRow1.Controls.Add(new LiteralControl("Short Name: "));
pnlRow1.Controls.Add(txtShort_name);
pnlRow1.Controls.Add(new LiteralControl("Servco #: "));
pnlRow1.Controls.Add(txtServco_No);
pnlRow2.Controls.Add(new LiteralControl("Employee #: "));
pnlRow2.Controls.Add(txtEmp_No);
pnlControls.ContentTemplateContainer.Controls.Add(pnlRow1);
pnlControls.ContentTemplateContainer.Controls.Add(pnlRow2);
pnlButton.ContentTemplateContainer.Controls.Add(btnSubmit);
pnlContainer.Controls.Add(pnlControls);
pnlContainer.Controls.Add(pnlButton);
Controls.Add(pnlContainer);
base.CreateChildControls();
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
HttpContext.Current.Profile["Short_name"] = txtShort_name.Text;
HttpContext.Current.Profile["Servco_no"] = Convert.ToInt32(txtServco_No.Text);
HttpContext.Current.Profile["Emp_no"] = Convert.ToInt32(txtEmp_No.Text);
HttpContext.Current.Profile.Save();
pnlControls.Update();
}
}
更新:进一步的调试让我相信这是我的 AJAX UpdatePanel 的问题。我在 btnSubmit_Click 代码和包含 WebControl 的页面上的 Page_Load 中放置了断点,它到达了 Page_Load 而永远不会到达 btnSubmit_Click!我认为 UpdatePanels 应该防止发生整页回发?!?