Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.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
C# 对象引用未设置为对象的实例-委托_C#_Asp.net_Events_User Controls_Delegates - Fatal编程技术网

C# 对象引用未设置为对象的实例-委托

C# 对象引用未设置为对象的实例-委托,c#,asp.net,events,user-controls,delegates,C#,Asp.net,Events,User Controls,Delegates,我想将值从用户控件传递到aspx页面。我正在尝试使用事件和委托来实现这一点。但是,我得到的对象引用没有设置为实例错误 所以,当我从usercontrol中单击image时,应该传递值 Mainpage.aspx protected void Page_Load(object sender, EventArgs e) { ShoudldCome(); } void MyParentMethod(string id) { //

我想将值从用户控件传递到aspx页面。我正在尝试使用事件和委托来实现这一点。但是,我得到的对象引用没有设置为实例错误

所以,当我从usercontrol中单击image时,应该传递值

Mainpage.aspx


 protected void Page_Load(object sender, EventArgs e)
    {
        ShoudldCome();
    }

    void MyParentMethod(string id)
    {
        // DO work
    }
    protected void ShoudldCome()
    {
        userControlPage g = new userControlPage();
        g.eventName += new userControlPage.abcDel(MyParentMethod);
    }


userControlPage.ascx

 public delegate void abcDel(string id);
    public event abcDel eventName;
    protected void CallHere()
    {
        eventName(Id); // I GET Id=7 here.
        //ERROR: Object reference not set to an instance of an object
    }

    protected void OnRowCommand(object sender, GridViewCommandEventArgs e)
    {
        var id = e.CommandArgument;
        Id = id.ToString();
        CallHere();
    }

这段代码需要很多改进,但从以下简单的事情开始:

 if (eventName!=null)  eventName(Id);
虽然不知道id来自何处,但检查是为了防止在没有人注册事件的情况下出现nullreference异常

因此,如果此代码未运行:

g.eventName += new userControlPage.abcDel(MyParentMethod);
你打电话到这里


那么您就有问题了,因为还没有人注册。

什么方法可以使用
eventName
呢?经典asp.net(lol)中的事件处理程序是viewstate的一种功能。一个页面创建html,它被设置为用户,一个按钮发回,发生的事情被解构,然后按钮的事件处理程序被调用。您不能只将事件添加到usercontrol,然后期望它们在任何地方都能像桌面应用程序中的事件或甚至asp.net中的事件一样工作。因此,没有人订阅您的事件,因此您在尝试调用它时会得到一个NRE。@实际上,我想将数据从一个用户控件传递到其他用户控件(或将一个用户控件传递到主aspx页,然后从主aspx页传递到第二个用户控件),因此我在这里读了一篇文章:[link]()是eventName为空。Id来自不同的逻辑。你能帮我吗?我已经帮了,eventName是空的,因为没有人注册该事件。谁在这里打电话?此代码:g.eventName+=newusercontrolpage.abcDel(MyParentMethod);需要在调用Callhere之前执行。我不希望为null,我希望将数据从用户控件传递到主页。我在这里读了这篇文章:。试着做同样的事情是你需要的。那篇文章很蹩脚,看起来没有写完,它没有解释任何事情。