我有一个项目,我需要从SQL Server的列表中创建菜单按钮。我遇到的问题是我需要在这些按钮的文本中添加代码。因此会有一个生日按钮,它应该显示未来两周内的生日数量或一个包含即将发生的事件数量的按钮。有关如何最好地做到这一点的任何想法?感谢。
瓦德
澄清:
还没有代码,只是一些要求。我正在做的是查询表以获取要显示的按钮列表。现在每个按钮可能都有动态文本,例如生日数,事件等...我试图看看处理这个问题的最佳方法是什么。当我遍历菜单项时,是否应该嵌入一段代码以与菜单项一起执行?也许我应该构建一个javascript文件以配合代码,我添加代码来查询某些菜单项的服务?谢谢你的帮助。
答案 0 :(得分:2)
你要问的是接近不可能。您的要求是动态编码,即。在编译之前,页面知道关于事件处理程序的 nothing 。
虽然可以动态添加按钮,但动态添加代码(以方法形式)非常困难,并且代表潜在的安全漏洞 !!
我说这几乎是不可能的,但如果你有足够的时间花的话,并非不可能。
首先:动态生成这些按钮。你听说过Repeater
控制吗?我希望如此,它允许您为SQL查询返回的每个元素添加一个按钮。显然,你可以从数据库中获取文本(你想让它可以本地化吗?需要额外的努力)
现在怎样?您必须为每个按钮分配自定义行为,这里几乎是不可能的部分。
“简单地”在数据库中存储使用Action
委托实现已知方法的类的强名称,或者如果需要参数则使用Action<object>
,并在ASP.NET中调用该方法通过分析CommandName
的{{1}}事件的CommandArgument
和Button
来按下该按钮。可以在Bin目录中的单独DLL中存储插件(这就是你需要强名称的原因),可以热部署新的DLL
使用像Lua这样的脚本语言,并存储有关要在数据库中运行的脚本的列。当按下按钮时,通过Lua解释器为C#运行该脚本(如果你需要它的链接,你太懒了,我可以谷歌为你)。如果值得努力的话,这会让你在Lua和.NET之间进行大量的交叉集成
没有其他想法尚未
答案 1 :(得分:0)
如果我理解正确的话,你创建按钮但没有动态文本的问题吗?你应该在SQL中做到这一点。你在使用SQL-Server吗?
这样的事情:
SELECT COUNT(*) AS Next2WeeksBirthDays FROM TblUser WHERE BirthDay < DATEADD(week, 2, GETDATE())
或
SELECT COUNT(*) AS Next2WeeksEvents FROM TblEvents WHERE TimeStamp < DATEADD(week, 2, GETDATE())
答案 2 :(得分:0)
我想了解你在这里问的是什么,所以如果这不能回答你的问题,请告诉我。如果您只想在页面上显示数据源中的项目之前运行某些逻辑,那么代码非常简单:
ASPX页面:
<asp:Repeater ID="Repeater1" OnItemDataBound="Repeater1_ItemDataBound" runat="server">
<ItemTemplate>
<asp:Button ID="Button1" runat="server" />
</ItemTemplate>
</asp:Repeater>
C#Codebehind:
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
Button buttonCtrl = (Button)e.Item.FindControl("Button1");
string buttonText = GetButtonText(e.Item.DataItem);
buttonCtrl.Text = buttonText;
}
...其中GetButtonText是一个自定义方法,根据传入的数据行或列表项决定Button1的文本内容。
如果你需要的东西比这更复杂,请在下面回答,我会提供不同的解决方案。
编辑:如何只是一个可以动态添加到页面的Web用户控件库?没有必要以这种方式在数据库中存储任何代码,只是指示要使用哪个控件以及传入的任何参数。许多CMS以这种方式运行。
答案 3 :(得分:0)
如何使用返回图像的通用处理程序,在那里手动创建?使用一些System.Drawing类来创建图像(例如,加载小图标和写入文本),然后将其byte []写入OutputStream。