动态链接按钮在单击时不调用命令

时间:2015-02-05 15:48:23

标签: c# asp.net asplinkbutton

动态控件新手,但直到现在我一直在创建它们 我的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);
            ...

永远不会达到处理程序中的断点

我以为我是在正确的位置创建链接按钮 链接按钮非常愉快地出现在网格中 当我点击链接按钮时有一个电话 到Page_PreInit和Page_Load,正如我所料 这是一个回发。 但是从不调用AssignAll_Click。

在浏览器页脚中显示" javascript:__ dooPsotabck(..."当你悬停时 通过buttonlink

1 个答案:

答案 0 :(得分:1)

我认为问题在于这一行:

lb.Command += new CommandEventHandler(AssignAll_Click);

将其更改为:

lb.Command += AssignAll_Click;

编辑: 您也希望将其从Page_PreInit移至Page_Init,但您可能会在Page_LoadIsPostBack之外)找到更多成功。这是一个适合我的例子:

在ASPX页面上:

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

代码隐藏:

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

查看代码,看起来您在GridView中添加了另一列,并在每列中为该行创建了一个按钮 - 但您已在Page_Load上添加了该列,并且正在创建该按钮并在Page_PreInit

之前绑定到它