Asp.net 如何将自定义事件参数传递到标准asp:控件
我很容易理解如何在纯C代码中使用自定义事件,但如何在asp:button click上传递自定义事件参数呢 我尝试过各种方法(定义新的事件参数、新的代理等),但都没有成功Asp.net 如何将自定义事件参数传递到标准asp:控件,asp.net,Asp.net,我很容易理解如何在纯C代码中使用自定义事件,但如何在asp:button click上传递自定义事件参数呢 我尝试过各种方法(定义新的事件参数、新的代理等),但都没有成功 是否有关于如何使用标准asp控件执行此操作的教程?只要您的EventArgs继承自System.EventArgs,您就可以传递它们。然后,一旦进入事件处理程序,就可以将事件强制转换为适当的子类型 以下是一个例子: using System; class Program { static event EventHan
是否有关于如何使用标准asp控件执行此操作的教程?只要您的EventArgs继承自System.EventArgs,您就可以传递它们。然后,一旦进入事件处理程序,就可以将事件强制转换为适当的子类型 以下是一个例子:
using System;
class Program
{
static event EventHandler Foo;
static void Main()
{
// Here is cast the EventArgs to FooEventArgs
Foo += (o,e) => Console.WriteLine(((FooEventArgs)e).Number);
// Notice that I am passing a "FooEventArgs" instance
// even though the delegate signature for "EventHandler"
// specifies "EventArgs". Polymorphism in action. :)
Foo(null, new FooEventArgs { Number = 1 });
}
}
class FooEventArgs : EventArgs
{
public int Number { get; set; }
}
我知道您正在与现有的控制代理一起工作,因此不幸的是,这种类型的转换是必要的。请记住,在.NET 2.0及更高版本中有一个
事件处理程序,其中T:EventArgs
委托将允许您执行我上面所做的操作,而无需强制转换。只要您的EventArgs继承自System.EventArgs,您就可以传递它们。然后,一旦进入事件处理程序,就可以将事件强制转换为适当的子类型
以下是一个例子:
using System;
class Program
{
static event EventHandler Foo;
static void Main()
{
// Here is cast the EventArgs to FooEventArgs
Foo += (o,e) => Console.WriteLine(((FooEventArgs)e).Number);
// Notice that I am passing a "FooEventArgs" instance
// even though the delegate signature for "EventHandler"
// specifies "EventArgs". Polymorphism in action. :)
Foo(null, new FooEventArgs { Number = 1 });
}
}
class FooEventArgs : EventArgs
{
public int Number { get; set; }
}
我知道您正在与现有的控制代理一起工作,因此不幸的是,这种类型的转换是必要的。请记住,在.NET 2.0及更高版本中有一个
事件处理程序,其中T:EventArgs
委托将允许您在不使用强制转换的情况下执行我上面所做的操作。我不相信在不创建自己的控件的情况下有任何方法可以做到这一点。但是,我有时会使用按钮上的CommandAgment和commandname属性来提供附加信息我不相信在不创建自己的控件的情况下有办法做到这一点。但是,我有时会使用按钮上的CommandAgment和commandname属性来提供附加信息我认为您不能。按钮本身将使用自己的EventArgs对象调用Click事件,不幸的是,您无法劫持该调用。但是,您可以使用闭包:
protected void Page_Load(object sender, EventArgs e)
{
int number = 1;
button.Click += (o, args) => Response.Write("Expression:"+number++);
number = 10;
button.Click += delegate(object o, EventArgs args) { Response.Write("Anonymous:"+number); };
}
顺便说一下,这个输出是表达式:10Anonymous:11理解为什么这是输出是理解闭包的一大步!即使处理Click事件时,
number
超出范围,但它不会被销毁,因为两个已定义的事件处理程序都有对它的引用。因此,它和它的价值将一直保持到不再需要它为止。我知道这不是闭包的最技术性的解释,但应该能让您了解闭包是什么。我认为您做不到。按钮本身将使用自己的EventArgs对象调用Click事件,不幸的是,您无法劫持该调用。但是,您可以使用闭包:
protected void Page_Load(object sender, EventArgs e)
{
int number = 1;
button.Click += (o, args) => Response.Write("Expression:"+number++);
number = 10;
button.Click += delegate(object o, EventArgs args) { Response.Write("Anonymous:"+number); };
}
Expression:10Anonymous:11
顺便说一下,这个输出是表达式:10Anonymous:11理解为什么这是输出是理解闭包的一大步!即使处理Click事件时,
number
超出范围,但它不会被销毁,因为两个已定义的事件处理程序都有对它的引用。因此,它和它的价值将一直保持到不再需要它为止。我知道这不是闭包最技术性的解释,但应该可以让您了解闭包是什么。我确实遇到了一些关于eventargs和我的customeventargs之间兼容性的问题。我想铸造可以解决这个问题。我想试试:)我确实遇到了一些关于eventargs和我的customeventargs之间兼容性的问题。我想铸造可以解决这个问题。我试试看:)
Expression:10Anonymous:11