2013-04-30 37 views
1

我有一個WebControl包含一些文本框和一個按鈕。一切都顯示精美。當按鈕被點擊時,我需要服務器用文本框的內容做一些事情。爲了在回發後保留文本框的內容,我將文本框和按鈕放在單獨的UpdatePanel中,並將它們的UpdateMode設置爲UpdatePanelUpdateMode.Conditional。我不需要需要在頁面中處理這個事件; I 總是希望在單擊按鈕時執行WebControl中定義的btnSubmit_Click事件。按鈕OnClick事件不從內部WebControl發射

我認爲這比提高包含頁面處理事件容易,但唉!到目前爲止,我無法讓事件發生。我在這裏做錯了什麼?

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(); 
    } 
} 

UPDATE:進一步調試導致我相信,這是我的AJAX UpdatePanel的一個問題。我在btnSubmit_Click代碼中和包含WebControl的頁面上的Page_Load中放置了斷點,並且該斷點轉到Page_Load,並且永遠不會轉到btnSubmit_Click!我認爲UpdatePanels應該保持整頁回發的發生?!?

回答

0

創建按鈕,添加以下代碼:

btnSubmit.Attributes.Add("onclick", "btnSubmit_Click");

+0

感謝您的答覆,伊赫桑,但沒有奏效。我在應該添加事件的行之後添加了屬性。 – user2337603 2013-05-01 03:10:00

+0

你在HTML代碼中放置了「asp:button」標籤嗎?您必須將其添加並將其與您製作的自定義代碼進行匹配。 – 2013-05-01 07:42:50

+0

這是一個WebControl,所以沒有標記;只有C# – user2337603 2013-05-01 10:54:28