【问题标题】:Object reference not set to an instance of an object- Delegates对象引用未设置为对象的实例 - 委托
【发布时间】:2015-03-17 18:39:20
【问题描述】:

我想将值从用户控件传递到 aspx 页面。我正在尝试为此使用事件和代表。但是,我得到对象引用未设置为实例错误。

所以,当我从用户控件中单击图像时,应该传递值

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();
    }

【问题讨论】:

  • eventName持有什么方法?
  • This isn't how this works. This isn't how any of this works. 经典 asp.net (lol) 中的事件处理程序是视图状态的虚构。一个页面创建 html,它被设置给用户,一个按钮回传,发生的事情被解构,然后调用按钮的事件处理程序。您不能只将事件添加到用户控件并期望它们在桌面应用程序中的事件甚至 asp.net 中的事件附近的任何地方工作。所以没有人订阅你的事件,所以你在尝试调用它时会得到一个 NRE。
  • @Will 实际上,我想将数据从用户控件传递到其他用户控件(或 1 个用户控件到主 aspx 页面,然后从主 aspx 页面到第二个用户控件),所以我读了这里有一篇文章:[链接] (dotnetbull.com/2013/03/…)

标签: c# asp.net events user-controls delegates


【解决方案1】:

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

 if (eventName!=null)  eventName(Id);

虽然不知道 id 来自哪里,但检查是为了防止 nullreference 异常,以防万一没有人注册该事件。

所以如果这段代码没有运行:

g.eventName += new userControlPage.abcDel(MyParentMethod);

然后你调用这里,

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

【讨论】:

  • 是的,eventName 为空。 Id 来自不同的逻辑。你能帮我吗?
  • 我已经做了,eventName 为空,因为没有人注册该事件。谁在呼叫 Callhere ?此代码: g.eventName += new userControlPage.abcDel(MyParentMethod);需要在调用 Callhere 之前执行。
  • 我不想为空,我想将数据从用户控件传递到主页。我在这里阅读了这篇文章:dotnetbull.com/2013/03/…。尝试做同样的事情
  • w3schools.com/aspnet 是您所需要的。那篇文章很蹩脚,看起来还没完,它没有解释任何东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多