2010-02-22 38 views
0

我有一个继承自LinkBut​​ton ASP.NET控件的类,以便在动态创建LinkBut​​ton时包含一个int“Value”属性以记住数据库ID。这样我就可以在回发的基础上加载一些基于该ID的数据库驱动的内容。简单的ASP.NET/C#问题 - 事件

我的问题是:有一种简单的方法可以在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); 

回答

0

好的,我在这里解决了我自己的问题,结果是我之前遇到过的一个菜鸟问题!我想这是值得任何潜在的尴尬,在这里发表分辨率为别人的利益......

当您创建动态控件必须重新创建他们回传

这似乎总是反直觉我,但我的控件创建代码中有一个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方法是完全足够的,但我很高兴我现在“获得”代表&事件的概念比我以前做的更多:)

4

我不认为你需要从LinkBut​​ton的继承,只是附加一个“ID”属性,LinkBut​​ton的有一个名为“CommandArgument”你可以利用存储该ID属性,并送它回发。

1

LinkBut​​ton控件已为此设置了CommandArgument属性。您只需处理Click或Command事件,将CommandArgument强制转换为int,然后捕获该ID。