2015-02-05 91 views
1

新動態控件,但直到現在我已經在我的GridView中的 模板字段中成功創建它們,最近從超鏈接切換到鏈接按鈕 ,但不得不作出一些更改但仍然沒有工作動態鏈接按鈕沒有調用命令時點擊

在我的網頁我有以下代碼(有刪節,以突出的部分)

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!this.IsPostBack) 
    { 
     ... 
     ... 
     TemplateField tf = new TemplateField(); 
     tf.HeaderText = "Action"; 
     tf.ItemTemplate = new AssignPage.MyTemplate(..., mylb); 
     GridView1.Columns.Add(tf); 


protected void Page_PreInit(object sender, EventArgs e) 
{ 
    LinkButton lb = new LinkButton(); 
    lb.Text = "AssignAll"; 
    lb.Command += new CommandEventHandler(AssignAll_Click); 
    lb.CommandName = "XXX"; 
    this.mylb = lb; 




protected void AssignAll_Click(object sender, CommandEventArgs e) 
{ 
    string[] arg = new string[2]; // BREAK POINT HERE 
    arg = e.CommandArgument.ToString().Split(';'); 
    ... 
    ... 
    Response.Redirect("BaseAndRepeats.aspx?id=" + r.Event.ID); 

在模板類我有我有

LinkButton lb; 

    public MyTemplate(..., LinkButton _lb) 
    { 
     ... 
     lb = _lb; 
     ... 



    public void InstantiateIn(System.Web.UI.Control container) 
    { 
      ... 
      ... 
      // various conditional statements 

      lb.CommandArgument = mylist[rowCount].ReqtID.ToString() + ";" + mylist[rowCount].RotaUser; 
      container.Controls.Add(lb); 
      ... 

在處理程序中的斷點從未達到

我想我是創造在正確的地方,當我在LinkBut​​ton的點擊有一個叫 到Page_PreInit LinkBut​​ton的網格中顯示的相當愉快 LinkBut​​ton的和Page_Load,正如我期望的 這是一個回傳。 但AssignAll_Click永遠不會被調用。

在瀏覽器頁腳顯示 「的javascript:__dooPsotabck(...」 當你將鼠標懸停 在buttonlink

回答

1

我相信問題是這一行:

lb.Command += new CommandEventHandler(AssignAll_Click); 

將其更改爲:

lb.Command += AssignAll_Click; 

編輯: 你也想將其從Page_PreInit移動到Page_Init但你可能會在Page_LoadIsPostBack之外)中找到更多成功。下面是對我工作的例子:去在你的代碼,它看起來像你的加入另一列到你的GridView和創造

protected void Page_Init(object sender, EventArgs e) 
{ 
    //Init used because TestPanel doesn't exist yet 
    CreateTestButton(); 
} 

private void CreateTestButton() 
{ 
    var lb = new LinkButton(); 
    lb.Text = "hello"; 
    lb.Command += lb_Command; 
    TestPanel.Controls.Add(lb); 
} 

void lb_Command(object sender, CommandEventArgs e) 
{ 
    throw new NotImplementedException(); 
} 

在ASPX頁面:

<asp:Panel ID="TestPanel" runat="server" /> 

代碼隱藏按鈕列中的每一行 - 但是你已經在Page_Load上添加了列,並且按鈕被創建並綁定到它之前Page_PreInit

+0

似乎沒有工作。我還讀了控件應該添加到頁面,但我不知道如何做到這一點,我從來沒有與我的其他控件。 – hardya 2015-02-05 16:13:20

+0

所以,我還沒有最終確定這是一個答案,但我已經做了'創建templatefield將鏈接按鈕傳遞給它的模板,並將templatefield添加到網格'以在回發中發生。 這對我來說並沒有發生,因爲我立即重定向,並且我不認爲控件需要實際返回到要調用的事件的模板域和網格中,我認爲這只是渲染所必需的。 – hardya 2015-02-05 16:41:26

+0

編輯我的回覆。是的,控件需要在PostBack上創建,或者他們只是停止存在,並且他們的事件不會被觸發。 – 2015-02-05 16:45:52