2015-02-05 87 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