【问题标题】:Dynamically created button click event is not firing动态创建的按钮单击事件未触发
【发布时间】:2018-01-05 17:14:14
【问题描述】:

我需要为查询的每一行创建一个“投票”按钮。因此我必须动态地做。但是,由于某种原因,当我动态添加按钮并在 page_init() 方法中创建它的事件处理程序时 - 按钮已创建,但单击时未触发事件。

这是我正在使用的代码。我也试过用page_load()代替page_init(),但结果是一样的。

protected void Page_Init(object sender, EventArgs e)
{
    if (Session["user"] == null) Response.Redirect("../login/Login.aspx", true);

    string id = Request.QueryString["iss"];
    if (id == null || id == "") Response.Redirect("../Default.aspx");

    SqlRow issue = Database.Query("SELECT * FROM issues WHERE id=?", id)[0];
    SqlRes options = Database.Query("SELECT * FROM options WHERE issue=?", id);
    issueTitle.Title = issue["title"].ToString();
    issueText.InnerText = issue["issue"].ToString();

    if (options.Count == 0) return;
    int w = 90 / options.Count;
    foreach(SqlRow option in options)
    {
        bool voted = Database.Query("SELECT * FROM options_votes WHERE opt=? AND userid=?", option["Id"], Session["user"]).Count>0;

        Part p = new Part
        {
            W = w,
        };
        var title = new HtmlGenericControl("h2");
        title.Attributes["class"] = "dark";
        title.InnerText = option["title"].ToString();
        p.Controls.Add(title);
        Button vote = new Button
        {
            Text = "VOTE",

        };
        vote.Click += (se, ev) =>
        {
            bool nvoted = Database.Query("SELECT * FROM options_votes WHERE opt=? AND userid=?", option["Id"], Session["user"]).Count > 0;
            if (nvoted)
            {
                Database.Query("DELETE FROM options_votes WHERE opt=? AND userid=?", option["Id"], Session["user"]);
                vote.BackColor = Color.FromArgb(0x17, 0x25, 0x2a);
            }
            else
            {
                Database.Query("INSERT INTO options_votes (opt, userid) VALUES (?, ?)", option["Id"], Session["user"]);
                vote.BackColor = Color.Gray;
            }
        };
        if (voted) vote.BackColor = Color.Gray;
        vote.Attributes["class"] = "vote";
        p.Controls.Add(vote);

        issueTitle.Controls.Add(p);
    }
}

类似问题的其他答案说要添加带有visible=false 的按钮,但在我的情况下,我无法在 .aspx 页面中添加按钮,它必须在代码隐藏中。

【问题讨论】:

  • 您可以将查询结果绑定到Repeater,从而避免问题。

标签: c# asp.net webforms


【解决方案1】:

我找到了解决方案: 通过将UseSubmitBehavior="false" 添加到按钮中,我设法让点击事件正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 2012-05-14
    • 1970-01-01
    • 2018-11-13
    • 2012-08-18
    • 1970-01-01
    相关资源
    最近更新 更多