简单ASP.NET/C#问题-事件
我有一个从LinkButton ASP.NET控件继承的类,它包含一个int“Value”属性,用于在动态创建LinkButton时记住数据库ID。这样我就可以在回发时基于该ID加载一些数据库驱动的内容 我的问题是:有没有一种简单的方法可以在C#中实现这一点?我在互联网上浏览了一下,获得了很多关于代理和自定义事件处理的信息,但对于我需要做的事情来说,这似乎过于复杂了。我应该阅读委托、泛型和事件,还是可以覆盖LinkButtons Click事件以捕获ID并查询DB 编辑 我正在动态创建控件,因此不确定如何将事件链接到动态添加控件的单击事件。我接受下面关于CommandArgument属性的观点,但是有人举过将CommandArgument与动态创建的控件一起使用的例子吗简单ASP.NET/C#问题-事件,c#,events,C#,Events,我有一个从LinkButton ASP.NET控件继承的类,它包含一个int“Value”属性,用于在动态创建LinkButton时记住数据库ID。这样我就可以在回发时基于该ID加载一些数据库驱动的内容 我的问题是:有没有一种简单的方法可以在C#中实现这一点?我在互联网上浏览了一下,获得了很多关于代理和自定义事件处理的信息,但对于我需要做的事情来说,这似乎过于复杂了。我应该阅读委托、泛型和事件,还是可以覆盖LinkButtons Click事件以捕获ID并查询DB 编辑 我正在动态创建控件,因此
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方法是非常合适的,但我很高兴我现在“了解”了委托和事件的概念,这比我以前了解的要多:)