Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何将自定义事件参数传递到标准asp:控件_Asp.net - Fatal编程技术网

Asp.net 如何将自定义事件参数传递到标准asp:控件

Asp.net 如何将自定义事件参数传递到标准asp:控件,asp.net,Asp.net,我很容易理解如何在纯C代码中使用自定义事件,但如何在asp:button click上传递自定义事件参数呢 我尝试过各种方法(定义新的事件参数、新的代理等),但都没有成功 是否有关于如何使用标准asp控件执行此操作的教程?只要您的EventArgs继承自System.EventArgs,您就可以传递它们。然后,一旦进入事件处理程序,就可以将事件强制转换为适当的子类型 以下是一个例子: using System; class Program { static event EventHan

我很容易理解如何在纯C代码中使用自定义事件,但如何在asp:button click上传递自定义事件参数呢

我尝试过各种方法(定义新的事件参数、新的代理等),但都没有成功


是否有关于如何使用标准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