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

简单ASP.NET/C#问题-事件,c#,events,C#,Events,我有一个从LinkButton ASP.NET控件继承的类,它包含一个int“Value”属性,用于在动态创建LinkButton时记住数据库ID。这样我就可以在回发时基于该ID加载一些数据库驱动的内容 我的问题是:有没有一种简单的方法可以在C#中实现这一点?我在互联网上浏览了一下,获得了很多关于代理和自定义事件处理的信息,但对于我需要做的事情来说,这似乎过于复杂了。我应该阅读委托、泛型和事件,还是可以覆盖LinkButtons Click事件以捕获ID并查询DB 编辑 我正在动态创建控件,因此

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

我的问题是:有没有一种简单的方法可以在C#中实现这一点?我在互联网上浏览了一下,获得了很多关于代理和自定义事件处理的信息,但对于我需要做的事情来说,这似乎过于复杂了。我应该阅读委托、泛型和事件,还是可以覆盖LinkButtons Click事件以捕获ID并查询DB

编辑

我正在动态创建控件,因此不确定如何将事件链接到动态添加控件的单击事件。我接受下面关于CommandArgument属性的观点,但是有人举过将CommandArgument与动态创建的控件一起使用的例子吗

var lnkbtnTitle = new LinkButton();

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

我认为您不需要从linkButton继承来附加一个“ID”属性,linkButton有一个名为“CommandArgument”的属性,您可以利用它来存储此ID,并在回发时发送它。

我认为您不需要从linkButton继承来附加一个“ID”属性,linkButton有一个名为“CommandArgument”的属性您可以利用它来存储此ID,并在回发时将其发送。

LinkButton控件已具有用于此目的的属性。您只需处理Click或Command事件,将CommandArgument强制转换为int,就可以捕获ID。

LinkButton控件已经有了用于此目的的属性。您只需处理单击或命令事件,将CommandArgument强制转换为int,就可以捕获ID。

好的,我在这里解决了自己的问题,这是我以前遇到的新手问题!我认为为了其他人的利益,在这里发布决议是值得的

创建动态控件时,必须在回发时重新创建它们

这似乎总是违反我的直觉,但我在控件创建代码上有一个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方法非常合适,但我很高兴现在比以前更多地“理解”了委托和事件的概念:)

好的,我在这里解决了自己的问题,这是我以前遇到的新手问题!我认为为了其他人的利益,在这里发布决议是值得的

创建动态控件时,必须在回发时重新创建它们

这似乎总是违反我的直觉,但我在控件创建代码上有一个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方法是非常合适的,但我很高兴我现在“了解”了委托和事件的概念,这比我以前了解的要多:)