简单的ASP.NET / C#问题 - 事件

时间:2010-02-22 14:26:24

标签: c# events

我有一个继承自LinkBut​​ton ASP.NET控件的类,它包含一个int“Value”属性,用于在动态创建LinkBut​​tons时记住数据库ID。这样我就可以在回发时基于该ID加载一些数据库驱动的内容。

我的问题是:有没有一种简单的方法可以在C#中实现这一目标?我已经浏览了互联网并获得了很多关于代表和信息的信息。自定义事件处理,但它似乎过于复杂,我需要做什么。我是否应该阅读代表,仿制药和事件或我可以覆盖LinkBut​​tons Click事件来捕获ID并查询数据库吗?

修改

我正在动态创建控件,因此我不确定如何将事件链接到动态添加控件的click事件。我在下面讨论CommandArgument属性,但有没有人有一个使用CommandArgument和动态创建控件的例子?

var lnkbtnTitle = new LinkButton();

            lnkbtnTitle.CssClass = "ABC";
            lnkbtnTitle.ToolTip = Description;
            lnkbtnTitle.Text = Name + ' ' + Version;
            lnkbtnTitle.CommandArgument = ID.ToString();
            pnlHelpGuidesView.Controls.Add(lnkbtnTitle);

3 个答案:

答案 0 :(得分:4)

我认为你不需要从linkBut​​ton继承只附加一个“ID”属性,linkbutton有一个名为“CommandArgument”的属性,你可以利用它来存储这个ID,并在Postback上发送它。

答案 1 :(得分:1)

为此,LinkBut​​ton控件已具有CommandArgument属性。您需要做的就是处理Click或Command事件,将CommandArgument强制转换为int,并且您已捕获了ID。

答案 2 :(得分:0)

好的,我在这里解决了自己的问题,结果证明这是我以前遇到过的新手问题!我认为,为了让其他人受益,在此发布决议是值得的,这是值得的尴尬......

当您创建动态控件时,您必须在POSTBACK上重新开始

这对我来说似乎总是违反直觉但我在我的控件创建代码上有一个if(!IsPostBack)指令,这意味着我尝试过这些事件的任何解决方案都没有触发。这是因为控件不再存在,因为我没有在回发时重新创建它。

在回答我自己的问题并接受这里提到的要点时,以下代码有效......

private void DrawHelpGuide(int ID, int Type, string Name, string Description, string Version, string URL)
    {
            var lnkbtnTitle = new LinkButton();

            lnkbtnTitle.CssClass = "HelpGuideTitle";
            lnkbtnTitle.ToolTip = Description;
            lnkbtnTitle.Text = Name + ' ' + Version;
            lnkbtnTitle.CommandArgument = ID.ToString();
            lnkbtnTitle.Click += new EventHandler(lnkbtnTitle_Click);
            pnlHelpGuidesView.Controls.Add(lnkbtnTitle);
        }

    void lnkbtnTitle_Click(object sender, EventArgs e)
    {
        var ClickedButton = (LinkButton)sender;
        var id = int.Parse(ClickedButton.CommandArgument);
    } 

我现在也意识到我之前写过的各种版本,虽然更复杂,但也有效!在我的具体情况下,CommandArgument方法是完全足够的,但我很高兴我现在“得到”代表的概念&事件比我以前做的要多得多:)