- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有两个自定义按钮的 aspx 页面,如下所示:
<cfw:Button runat="server" OnServerClick="CreateProduct" name="Create product" />
<cfw:Button runat="server" OnServerClick="OrderProduct" name="Order product" />
我想要 1 个可同时创建和订购产品的按钮。所以我基本上想问一下我可以在 .aspx 中向同一个事件添加多个事件处理程序吗?
按钮事件本身支持这一点,并且可以通过编程实现:
public event ProcessEventHandler ServerClick
{
add
{
Events.AddHandler(serverClick, value);
PostBack = true;
}
remove { Events.RemoveHandler(serverClick, value); }
}
游戏规则(由于内部/公司标准):
我期待着您的意见!
最佳答案
这是我的解决方案:根据您的限制,似乎唯一的可能性是 (a) 继承您的自定义框架按钮并创建一个子类,或者 (b) 修改现有的框架按钮。
这是一个通过继承 System.Web.UI.WebControls.Button 类和测试页面而运行良好的实现(我对其进行了测试:)):
using System.Web.UI.WebControls;
namespace StackOverflowWeb
{
public class MultiCastButton : Button
{
public ListItemCollection ClickEventList { get; set; }
private void SetEventHandlers()
{
// convert listitem values to EventHandler type
Func<ListItem, EventHandler> getEventHandler = ev =>
EventHandler.CreateDelegate(
typeof(EventHandler), this.Page, ev.Value) as EventHandler;
if (ClickEventList != null && ClickEventList.Count > 0)
{
for (var i = 0; i < ClickEventList.Count; i++)
{
this.Click += getEventHandler(ClickEventList[i]);
}
}
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
// must occur OnInit because 'this.Page'
// is null prior to this event firing
SetEventHandlers();
}
}
}
然后,你有测试页面(代码隐藏)——我知道你说过你没有代码隐藏,所以这些事件处理程序可以存在于任何类或类库中,你可以在页面的前面注册那个类.此解决方案适用于隔离测试环境(即新的 ASP.net 网络项目)。
您可能必须修改 getEventHandler() 方法中的代码,而不是将目标类型设为 this.Page,您可以使用任何包含实际事件处理程序空白的类型。
public partial class _Default : System.Web.UI.Page
{
public void Test_Click(object sender, EventArgs args)
{
ResultPanel.Controls.Add(new Label() { Text = "Test Click Executed" });
}
public void Test_Click2(object sender, EventArgs args)
{
ResultPanel.Controls.Add(new Label() { Text = "Test Click 2 Executed" });
}
public void Test_Click3(object sender, EventArgs args)
{
ResultPanel.Controls.Add(new Label() { Text = "Test Click 3 Executed" });
}
public void Test_Click4(object sender, EventArgs args)
{
ResultPanel.Controls.Add(new Label() { Text = "Test Click 4 Executed" });
}
}
最后是你在前面的声明
<%@ Register Namespace="StackOverflowWeb" TagPrefix="sow" Assembly="StackOverflowWeb" %>
<style> span { display: block; }</style>
<sow:MultiCastButton runat="server" ID="TestClickMultiCastButton" >
<ClickEventList>
<asp:ListItem>Test_Click</asp:ListItem>
<asp:ListItem>Test_Click2</asp:ListItem>
<asp:ListItem>Test_Click3</asp:ListItem>
<asp:ListItem>Test_Click4</asp:ListItem>
</ClickEventList>
</sow:MultiCastButton>
<asp:Panel runat="server" ID="ResultPanel" />
请注意,我使用的是 ListItem 和 ListItemCollection,因为它最容易在 ASP.net Web 窗体应用程序的 UI 中声明。
我希望你觉得这很有用!这是我在 StackOverflow 上的第一个答案,尽管我长期以来一直是一个狂热的读者。
关于c# - 是否可以在 .aspx 页面中向 ServerClick 添加多个事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4746367/
在 ASP.NET 编程的“代码隐藏”风格中,您将代码拆分为两个不同的文件:一个 .aspx 文件和一个 aspx.cs 文件。 (这适用于 C#;对于 VB,则为 aspx.vb。)每个人似乎都决定
在这个项目中你可以看到aspx文件下的aspx.designer.vb和aspx.vb 但是在我的项目中我没有它?? ,, 是什么赋予了?? 我可以通过右键单击然后单击查看代码来查看 vb 代码。 如
我将 my.aspx.cs 文件中的变量值传递到我的 .aspx 文件。当它在 aspx 中时,它的值会发生变化,然后需要返回到 .aspx.cs 文件。但是,它不允许我更改变量的值。有什么建议么?
我在 aspx 页面中使用多个 aspx 用户控件实例时遇到问题。当我尝试通过 Java 脚本获取用户控件元素值时会发生这种情况。 用户控制代码: function ucFun()
我有一个 asp.net 网站,我想知道是否可以将 .aspx 文件调用到另一个 .aspx 文件中。场景是我有 3 个左侧菜单,它们显示在各个页面上。 一开始我只有一个左侧菜单,因此将其添加到我的
我正在使用 C# 和 .NET ASP Web 应用程序开发我的第一个项目。我已成功连接到 SQL 数据库,但如何将输入从 .aspx(html 中)传递到 .aspx.cs(C# 中)? IE。(.
我已经阅读了很多关于同一问题的类似帖子,但这些修复对我不起作用。 我在页面代码的类区域中将变量声明为 Public,并在 Page_Load 子例程中为其分配一个值,但是当我在 javascript
在重命名不同的 ASPX 页面后,我曾多次遇到同样的问题,令我惊讶的是我在 stackoverflow 上找不到遇到同样问题的其他人。 当我运行我的 ASP.NET C# 项目时,调试器给我这样一条消
Select Zone East West North
这是我的 javascript 函数,其中值来自其他页面并且完美接收,但是如何在 cs 页面中检索“divConversation”值。这是我的代码 function myLoad() {
我不是编程新手,而是 Visual Studio、MVC、C#、ASP.NET 和 EXT.NET,即我尝试使用的所有工具的新手。 我正在尝试创建一个 Ext.Net 2.0 MVC4 项目,并获得了
我有一个 HTML 页面和一个 iframe(aspx 页面),如下所示。 Mypage.htm 此 Mypage.htm 将作为来自其他页面的链接提供,用户单击这些页面,Mypage.htm
我们最近设置了一个新的 SSRS 环境,报表的报表管理器 URL 现在为 Reports/Pages/Report.aspx 以前的环境是ReportList/Pages/ReportViewer.a
我正在尝试点击按钮,但我得到了 'ASP.views_home_index_aspx' does not contain a definition for'btnCreateOrder_Click'
我正在尝试将数据从 aspx.vb 页面传递到 aspx 页面。 在 aspx.vb 页面,我在 textbox 中放置了一个值(0 或 1),即 runat="server" 当加载 aspx 页面
我是 asp.net 的新手,正在处理一个有两个 .aspx 页面的问题集。 事件.aspx: 这是网站管理员在已经可用的面板(如事件标题、日期、信息等)的帮助下更新即将举行的事件和网络研讨会的地方。
这是我在 ASP.NET 中尝试执行的操作: 创建一个名为 Main.aspx 的页面。这个页面有一个 DIV 和一个按钮。 浏览器加载 Main.aspx。然后,当我单击该按钮时,我想将页面 Pag
我已经从一个不再可用的人那里继承了一个网站。在已部署的文件夹中,我有 Config.aspx(请参阅代码)。但是我找不到代码隐藏文件。配置页面有效。我在哪里可以找到 .cs 文件? 谢谢
我使用 iframe 来显示一个 aspx 页面,如下所示 this link 在 Displaypdf.aspx.cs 中,我正在显示一个 pdf,如下所示。我在
我的元素中有 2 个 aspx 文件。 first.aspx 页面上有一些内容,当我单击一个按钮时,它将在同一页面上启动一个框架(second.aspx 只有显示日历的代码)。 现在,一旦该日历 (s
我是一名优秀的程序员,十分优秀!