【问题标题】:Dynamically adding link button and event handler, Handler not firing动态添加链接按钮和事件处理程序,处理程序不触发
【发布时间】:2014-12-23 20:54:26
【问题描述】:

在后面的代码中,我创建了一个链接并添加了一个点击事件处理程序:

LinkButton newX = new LinkButton();
newX.Text = "x";
newX.Attributes.Add("problem", problems[p]);
newX.Click += new System.EventHandler(this.RemoveItemFromBucket);

链接在页面上显示正常。但是,当我在调试模式下运行并在处理程序的第一行设置断点时:

public void RemoveItemFromBucket(object sender, EventArgs e)
        {
            string problem = (sender as LinkButton).Attributes["problem"];
...
        }

事件没有触发。

按要求发布我的负载和 PreInit 代码:

protected void Page_Init(object sender, EventArgs e)
        {
            if (Session["elders"] == null)
            {
                Session["elders"] = (from s in masterDB.SnoMedElders select s).ToList();
            }

            if (Session["snoMed"] == null) {
                Session["snoMed"] = (from s in masterDB.mrconso_SnoMed2014_LimitedToDiseaseBranches select s).ToList();
            }

            if (Session["relations"] == null)                
            {
                Session["relations"] = (from s in masterDB.mrrel_SnoMed2014_LimitedToDiseaseBranches select s).ToList();
            }           
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["UserRole"] == null)
                Response.Redirect("Login.aspx");

            UnmappedNum.Text =  ((from t in (Session["elders"] as List<SnoMedElder>)
                                select t.SnoMedScui).Distinct().ToList().Count() -
                                (from t in masterDB.tbl_patients_problems_to_snomed_buckets_2014s
                                select t.SnoMedScui).Distinct().ToList().Count() + 600).ToString();
        }

编辑:找出问题所在。问题是我的整个页面都在一个 ajax 更新面板中。当我动态添加一个元素时,它不会被添加到更新面板中,因此整个页面正在重新加载。如何将元素添加到更新面板?

【问题讨论】:

  • 显示您的页面加载和页面 oninit 代码

标签: c# asp.net


【解决方案1】:

你不需要做这么低级的。

只需将该行控件放在 aspx 中即可:

<asp:LinkButton runat="server" ID="btnTest" OnClick="btnTest_Click" Text="x"></asp:LinkButton>

...在代码隐藏中:

protected void Page_Load(object sender, EventArgs e)
{
    btnTest.Attributes.Add("problem", problems[p]);
}

protected void btnTest_Click(object sender, EventArgs e)
{
    string problem = (sender as LinkButton).Attributes["problem"];
    //or even
    problem = btnTest.Attributes["problem"]
}

【讨论】:

  • 对不起,我的错,我把问题简单化了。我在运行时添加和删除其中的许多。我需要动态地做。
  • 也就是说,我找到了我的问题,现在我需要找出解决方案。问题是我的整个页面都在一个 ajax 更新面板中。当我动态添加一个元素时,它不会被添加到更新面板中,因此整个页面正在重新加载。如何将元素添加到更新面板?
  • 好的。我会考虑的。
【解决方案2】:

请考虑一下,如果您的页面回发,则没有用于触发事件的按钮。您需要在页面 oninit 或页面加载中添加链接按钮

【讨论】:

  • 是的,我刚刚想通了。该页面的其余部分位于 AJAX 更新面板中。如何添加到它以使这些事件成为 AJAX?
  • LinkBut​​ton newX = new LinkBut​​ton(); UpdatePanel1.ContentTemplateContainer.Controls.Add(newX); newX.Text = "x"; newX.Attributes.Add("问题", 问题[p]); newX.Click += new System.EventHandler(this.RemoveItemFromBucket);
  • 我正在尝试上述方法,但没有运气。有什么建议吗?
猜你喜欢
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 2010-12-04
  • 2012-08-17
相关资源
最近更新 更多