【发布时间】: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