C# 母版页中的事件处理程序访问客户端页中的控件
我在母版页上有一个按钮,单击该按钮时,会调用一个方法,该方法接受以前保存到viewstate的EventHandler,该方法位于客户端页上,并执行它:C# 母版页中的事件处理程序访问客户端页中的控件,c#,asp.net,webforms,event-handling,C#,Asp.net,Webforms,Event Handling,我在母版页上有一个按钮,单击该按钮时,会调用一个方法,该方法接受以前保存到viewstate的EventHandler,该方法位于客户端页上,并执行它: protected void Save_Click(object sender, EventArgs e) { this.SaveButtonEvent += (EventHandler)ViewState["saveEvent"]; if (this.SaveButtonEvent != null)
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\u Click事件,那么它就是正确的值
是因为从母版页调用了事件,所以无法获取文本框的正确值的原因吗?有什么解决办法吗
我应该补充一点,这个按钮是动态创建的,事件委托会有所不同,这就是为什么我必须在运行时设置它。我需要一种方法在单击时设置代理,并将其保持到再次更改为止。否,原因是您已将代理保存在viewstate中
当您检索委托时,它仍然引用创建委托的页面中的控件,因此您将使用不再存在的页面对象中的控件。您是否可以从母版页中公开可以在内容页中处理的事件 母版页:
public event EventHandler<EventArgs> AfterSave;
protected void Save_Click(object sender, EventArgs e)
{
if(AfterSave != null) AfterSave(this, EventArgs.Empty);
}
--Pavel啊,这是有道理的(尽管我也尝试过在会话中保存它,结果相同),你能建议我在回发之间存储它吗?@Sam:回发之间不能存储控制对象,它们必须为将要使用它们的页面对象创建。即使可以,它也没有用,因为它不是当前页面中的控件,所以更改它们不会产生明显的效果。您必须访问当前页面对象中的控件。将
页面
引用转换为实际的页面类,以便您可以访问它的成员,例如:((客户端页面)页面).Label1.Text
。谢谢,我最后做了一些非常类似的事情,并在正确的时间获得了事件处理程序。
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
}