我在母版页上有一个按钮,当点击它时,调用一个方法,该方法将以前保存到viewstate的EventHandler,此方法在客户端页面上,并执行它:
protected void Save_Click(object sender, EventArgs e)
{
this.SaveButtonEvent += (EventHandler)ViewState["saveEvent"];
if (this.SaveButtonEvent != null)
{
this.SaveButtonEvent(sender, e);
}
}
然后在客户端页面上调用一个非常简单的方法:
protected void Button2_Click(object sender, EventArgs e)
{
Label1.Text = TextBox2.Text;
}
但是,TextBox2的值不正确,它是加载页面时设置的文本框的值(或者如果页面上的任何其他项目更改它),则不传递新值。
如果我向客户端页面添加一个按钮,直接调用Button2_Click事件,它将获得正确的值。
我没有得到正确的文本框值,因为从母版页调用了事件?任何解决方案?
我应该补充一点,这个按钮是动态创建的,事件委托会有所不同,这就是为什么我必须在运行时设置它。我需要一种方法来设置代理点击,并保持这个,直到它再次更改。
答案 0 :(得分:1)
不,原因是您已在viewstate中保存了委托。
当您检索委托时,它仍然引用创建它的页面中的控件,因此您将使用不再存在的页面对象中的控件。
答案 1 :(得分:1)
您是否可以在主页面中公开可以在内容页面中处理的事件?
母版页:
public event EventHandler<EventArgs> AfterSave;
protected void Save_Click(object sender, EventArgs e)
{
if(AfterSave != null) AfterSave(this, EventArgs.Empty);
}
内容页面:
protected void Page_Load(object sender, EventArgs e)
{
MasterPageObject m = (MasterPageObject)base.Master;
m.AfterSave += onMasterSave;
}
private void onMasterSave(object sender, EventArgs e)
{
// Your processing here
}
- 帕维尔