C# 对象引用未设置为对象的实例-委托
我想将值从用户控件传递到aspx页面。我正在尝试使用事件和委托来实现这一点。但是,我得到的对象引用没有设置为实例错误 所以,当我从usercontrol中单击image时,应该传递值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) { //
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,我希望将数据从用户控件传递到主页。我在这里读了这篇文章:。试着做同样的事情是你需要的。那篇文章很蹩脚,看起来没有写完,它没有解释任何事情。