【问题标题】:dynamically created Button not firing oncommand in a repeater asp.net C#动态创建的按钮不会在转发器 asp.net C# 中触发 oncommand
【发布时间】:2015-09-08 17:43:48
【问题描述】:

我正在开发插槽预订应用程序,使用 asp.net 和 C# 。 问题是我动态创建的按钮没有在中继器控件中触发 oncommand。 (预订按钮) 没有中继器,我创建了动态按钮,之后我使用受保护的覆盖 void LoadViewState(object savedState) 重新创建了它们。

但是在这里我无法知道如何重新创建它,因为我在这里加载复选框和按钮,如果只能重新创建它那么如何做到这一点请帮助我,我从 3 天开始就摸不着头脑 这是我背后的代码

protected void grounds_ItemCommand(object source, RepeaterCommandEventArgs   e)
{
    if (e.CommandName == "btn")
    {
        Panel pl = (Panel)e.Item.FindControl("slotspanel");
        Button book = new Button();
       // Panel pl2 = (Panel)e.Item.FindControl("backgroundpanel");
        LinkButton lb = new LinkButton();
        LiteralControl lineBreak = new LiteralControl("<br/>");
        int listItemIds = 1;
        HtmlGenericControl ul = new HtmlGenericControl("ul");
        DataSet ds = new DataSet();
        ds = obj.getslots(1, "2014-10-10");
        if (ds != null)
        {

            if (ds.Tables[1].Rows.Count > 0)
            {
                for (int i = 0; i < ds.Tables[1].Rows.Count; i++)
                {
                    HtmlGenericControl li = new HtmlGenericControl("li");
                    CheckBox chk = new CheckBox();
                    HiddenField hd = new HiddenField();
                    // LinkButton lnk = new LinkButton();

                    chk.ID = "chk" + listItemIds;
                    hd.ID = "hd" + listItemIds;
                    chk.Text = ds.Tables[1].Rows[i]["slottimings"].ToString();
                    hd.Value = ds.Tables[1].Rows[i]["Type"].ToString();
                    // lnk.Click += Clicked;
                    //lnk.Command += new CommandEventHandler(lnkColourAlternative_Click);
                    //lnk.Click 
                    li.Controls.Add(chk);

                    ul.Controls.Add(li);
                    listItemIds++;
                }
            }
        }
        HtmlGenericControl li2 = new HtmlGenericControl("li");
        book.ID = "bookbutton";
        book.Text = "Book";
        book.CommandName = "Book";
        book.EnableViewState = true;
        book.UseSubmitBehavior = false;
        HiddenField count = new HiddenField();
        count.Value = (listItemIds-1).ToString();
        count.ID = "hiddencount";
        li2.Controls.Add(book);
        ul.Controls.Add(li2);
        pl.Controls.Add(ul);
        pl.Controls.Add(lineBreak);

        //pl2.Visible = true;

    }
    if (e.CommandName == "book")
    {
        if (Session["emailid"] != null)
        {

            HiddenField hd = (HiddenField)e.Item.FindControl("hiddencount");
            int r = Convert.ToInt16(hd.Value);
            int cost = 0;
            string slots = string.Empty;
            DataSet ds = new DataSet();
            ds = obj.getgrounddetails(1, Session["sportsname"].ToString());
            for (int i = 1; i <= r; i++)
            {
                CheckBox chk = (CheckBox)e.Item.FindControl("chk" + i);
                HiddenField hhd = (HiddenField)e.Item.FindControl("hd" + i);
                if (chk.Checked)
                {

                    //type = hhd.Value;
                    cost = cost + Convert.ToInt16(ds.Tables[1].Rows[i][hhd.Value].ToString());
                    slots = slots + chk.Text;

                }
            }

            Session["cost"] = cost.ToString();
            Session["slots"] = slots;
            Response.Redirect("payment/payment.aspx");
        }
        else
        {

        }

    }

}

提前致谢

【问题讨论】:

  • lnkColourAlternative_Click 在哪里?单击链接按钮时会发生什么?
  • shreesha 它在 cmets
  • 点击链接按钮时发生了什么
  • 没有什么只是加载中继器

标签: c# asp.net repeater aspbutton


【解决方案1】:

您正在使用动态数据实体 Web 应用程序吗?如果按钮在网格内,那么您可以使用这些代码动态添加按钮。

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                LinkButton lb = new LinkButton();
                lb.Text = "Book";
                lb.ID = "bookbutton";
                lb.CommandName = "Book";
                lb.Visible = true;
                var firstCell = e.Row.Cells[0];
                firstCell.Controls.Add(lb);
                lb.Command += new CommandEventHandler(OnClick_Command);
            }

        }

private void OnClick_Command(object sender, CommandEventArgs e)
        {

        }

【讨论】:

  • 这里我使用中继器,我动态创建了一个按钮,我的问题是 oncommand 没有为动态创建的按钮触发
  • 根据我的代码,您应该在 GridView1_RowCreated 中初始化命令。 lb.Command += new CommandEventHandler(OnClick_Command);并像这样创建 Onclick Command 事件。 private void OnClick_Command(object sender, CommandEventArgs e) { }
  • 我想访问中继器中该行的复选框,如何在私有函数中执行此操作。
  • 您的复选框在您的网格内吗?单击按钮时,您想对复选框做什么?请解释一下场景。
  • 将复选框插槽添加到预订部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 2018-11-13
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多