2011-08-18 23 views
1

我有一個簡單的web部件。點擊「添加」鏈接,設置2個文本框可見。輸入一些文字並點擊「保存」按鈕,但點擊事件不會觸發。我正在粘貼它希望得到某些建議的代碼。我尋找解決方案,但沒有找到任何我可以繼續。我意識到可能是什麼問題,但不知道如何修正它。我需要能夠在頁面呈現之前與處理程序的連接一起進行連接和事件處理,並且我嘗試重寫OnPreRender方法,但它在適當的時候無法正常工作。事件不會在webpart生命週期中觸發

我需要解決的其他小問題是onFocus方法在txtMyLinkName.Focus()中不起作用。謝謝你的幫助! - Risho

public class MyLinks : WebPart 
{ 
    public static string m_Portal = ConfigurationManager.ConnectionStrings["dbPortal"].ConnectionString; 

    Panel pnlMyLinks = new Panel(); 
    Label lblError = new Label(); 
    Label lblMyLinkURL = new Label(); 
    Label lblMyLinkName = new Label(); 
    TextBox txtMyLinkName = new TextBox(); 
    TextBox txtMyLinkURL = new TextBox(); 
    Button btnSaveMyLink = new Button();      
    LinkButton lbMyLinkAdd = new LinkButton(); 
    Literal litP1 = new Literal(); 
    Literal litBR1 = new Literal(); 

    public cisf_MyLinks() 
    { 
     this.Title = "MyLinks"; 
     this.ExportMode = WebPartExportMode.All; 
    } 

    protected override void CreateChildControls() 
    { 
     GetLinks(); 
     base.CreateChildControls(); 
    } 

    //protected override void OnPreRender(EventArgs e) 
    //{ 
    // btnSaveMyLink.Text = "Save"; 
    // btnSaveMyLink.Click += new EventHandler(btnSaveMyLink_Click); 
    // Controls.Add(btnSaveMyLink); 
    // base.OnPreRender(e); 
    //} 

    protected void GetLinks() 
    { 
     pnlMyLinks.Controls.Clear(); 
     int i = 0;    
     lbMyLinkAdd.Text = "Add"; 
     pnlMyLinks.Controls.Add(lbMyLinkAdd); 
     lbMyLinkAdd.Click += new EventHandler(lbMyLinkAdd_Click); 
     pnlMyLinks.Controls.Add(new LiteralControl("<br />")); 

     IDataReader drMyLinks = Get_MyLinks(Page.Request.ServerVariables["Logon_User"].Split("\\".ToCharArray())[1].ToLower()); 
     while (drMyLinks.Read()) 
     { 
      HyperLink hlMyLink = new HyperLink(); 
      LinkButton lbDelMyLink = new LinkButton(); 
      lbDelMyLink.Text = "(del)"; 
      lbDelMyLink.ToolTip = "Delete this link"; 
      lbDelMyLink.CssClass = "verytiny"; 
      lbDelMyLink.Command += new CommandEventHandler(DelMyLink); 
      lbDelMyLink.CommandName = drMyLinks["id"].ToString(); 
      pnlMyLinks.Controls.Add(lbDelMyLink); 
      pnlMyLinks.Controls.Add(new LiteralControl("&nbsp;&nbsp;")); 


      hlMyLink.ID = "hl" + drMyLinks["ID"].ToString(); 
      hlMyLink.Text = drMyLinks["Title"].ToString(); 
      hlMyLink.NavigateUrl = drMyLinks["url"].ToString(); 
      hlMyLink.Target = "_blank"; 
      hlMyLink.ToolTip = drMyLinks["Title"].ToString(); 
      pnlMyLinks.Controls.Add(hlMyLink); 
      pnlMyLinks.Controls.Add(new LiteralControl("<br />")); 

      if (drMyLinks["ID"].ToString() != "") { i += 1; } 
     } 
     this.Controls.Add(pnlMyLinks); 
    } 

    protected void lbMyLinkAdd_Click(object sender, EventArgs e) 
    { 
     lbMyLinkAdd.Visible = false; 
     lblMyLinkName.Visible = true; 
     txtMyLinkName.Visible = true; 

     litBR1.Visible = true; 
     lblMyLinkURL.Visible = true; 
     txtMyLinkURL.Visible = true; 
     btnSaveMyLink.Visible = true; 
     litP1.Visible = true; 
     (txtMyLinkName - dot focus) 
     lblMyLinkName.Text = "Link Name: "; 
     lblMyLinkURL.Text = "Link URL: "; 

     btnSaveMyLink.Text = "Save"; 
     btnSaveMyLink.Click += new EventHandler(btnSaveMyLink_Click); 

     pnlMyLinks.Controls.Add(new LiteralControl("<table class='mylinksTable' cellpadding='0' cellspacing='0' border='1'><tr valign='top'><td>")); 
     pnlMyLinks.Controls.Add(lblMyLinkName); 
     pnlMyLinks.Controls.Add(new LiteralControl("</td><td>")); 
     pnlMyLinks.Controls.Add(txtMyLinkName); 
     pnlMyLinks.Controls.Add(new LiteralControl("</td></tr><tr valign='top'><td>")); 
     pnlMyLinks.Controls.Add(lblMyLinkURL); 
     pnlMyLinks.Controls.Add(new LiteralControl("</td><td>")); 
     pnlMyLinks.Controls.Add(txtMyLinkURL); 
     pnlMyLinks.Controls.Add(new LiteralControl("</td></tr><tr valign='top'><td colspan='2'>")); 
     pnlMyLinks.Controls.Add(btnSaveMyLink); 
     pnlMyLinks.Controls.Add(new LiteralControl("</td></tr></table>")); 

     this.Controls.Add(pnlMyLinks); 
    } 

    protected void btnSaveMyLink_Click(object sender, EventArgs e) 
    { 
     string thisURL; 

     if ((txtMyLinkName.Text != "") && (txtMyLinkURL.Text != "")) 
     { 
      if (txtMyLinkURL.Text.StartsWith("http")) 
      { thisURL = txtMyLinkURL.Text; } 
      else { thisURL = "http://" + txtMyLinkURL.Text; } 

      AddMyLink(txtMyLinkName.Text, thisURL, Page.Request.ServerVariables["Logon_User"].Split("\\".ToCharArray())[1].ToLower()); 
      GetLinks(); 
      txtMyLinkName.Text = ""; 
      txtMyLinkURL.Text = ""; 
      lbMyLinkAdd.Visible = true;     
     } 

     lbMyLinkAdd.Visible = true; 
     lblMyLinkName.Visible = false; 
     txtMyLinkName.Visible = false; 
     litBR1.Visible = false; 
     lblMyLinkURL.Visible = false; 
     txtMyLinkURL.Visible = false; 
     btnSaveMyLink.Visible = false; 
     litP1.Visible = false; 
    } 
} 

回答

0

如果您在代碼中創建按鈕,則需要在Page_Load事件進行接線,使得click事件可以觸發。 Page_PreRender爲時已晚。

+0

這是一個.cs文件,沒有頁面加載。 – Risho

0

除了在Load事件中添加已發佈的控件外,還應設置ID字段,例如btnSaveMyLink.ID = "SaveLink";以獨特的價值。

+0

不好意思的是'Page_Load',但是我沒有看到你正在創建一個'WebPart';儘管如此,仍然嘗試爲您正在創建的「Button」設置一個「ID」。 – Andreas

+0

那麼這沒有什麼區別。我應該注意到,當頁面加載時,webpart顯示一個鏈接按鈕,當你單擊(lbMyLinkAdd_Click)時,它會創建保存按鈕的事件處理程序。當我查看頁面源時,缺少onClick屬性。 – Risho

相關問題