我有一个继承自LinkButton ASP.NET控件的类,它包含一个int“Value”属性,用于在动态创建LinkButtons时记住数据库ID。这样我就可以在回发时基于该ID加载一些数据库驱动的内容。
我的问题是:有没有一种简单的方法可以在C#中实现这一目标?我已经浏览了互联网并获得了很多关于代表和信息的信息。自定义事件处理,但它似乎过于复杂,我需要做什么。我是否应该阅读代表,仿制药和事件或我可以覆盖LinkButtons 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 :(得分:4)
我认为你不需要从linkButton继承只附加一个“ID”属性,linkbutton有一个名为“CommandArgument”的属性,你可以利用它来存储这个ID,并在Postback上发送它。
答案 1 :(得分:1)
为此,LinkButton控件已具有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方法是完全足够的,但我很高兴我现在“得到”代表的概念&事件比我以前做的要多得多:)