2011-05-25 69 views
0

我有是假设修改主网页上的文本框的值的内容网页上的按钮。设置很简单。ASP.NET:主后呈现的内容已经呈现

内容页 - 代码背后 - 按钮单击处理程序:

protected void but_mybutton_Click(object sender, EventArgs e) 
{ 
    string new_value = "!!"; 
    Master.textbox_value(new_value); 
} 

的问题是,到时候就得到这个函数,大师的页面已经呈现。要获得显示的新值,我需要重新刷新页面。无论如何,明确告诉页面重新渲染,因为我已经改变了它的控件的一些值,而不必重新刷新页面?

回答

2

母版页呈现确实像它的页面上的控制。 此博客文章向您显示整页生命周期,包括母版页的事件。

http://weblogs.asp.net/ricardoperes/archive/2009/03/08/asp-net-page-events-lifecycle.aspx

从你提供这应该工作作为按钮的onclick处理程序的代码获取母版的的OnPreRender之前执行。你能告诉我们什么代码

Master.textbox_value(new_value); 

呢?

我只是用最简单的安装测试这一点。在masterpage 1标签和设置标签文本的方法上。

public partial class SiteMaster : System.Web.UI.MasterPage 
{ 
    protected void Page_Load(object sender, EventArgs e) {} 

    public void SetLabelText(string text) { 
     this.Label1.Text = text; 
    } 
} 

在内容页面上有一个按钮。按钮的onclick处理程序调用masterpage上的方法。

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) {} 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     ((SiteMaster)this.Master).SetLabelText("foo"); 
    } 
} 

这将标签的文本设置为与预期相同的回发。

+0

你是对的,我用你的代码对它进行了测试,它工作得很好。事实证明,我与我的代码没有设置文本值的逻辑错误。谢谢您的帮助。 – Bill 2011-05-25 22:26:29

2

您需要检讨ASP.NET Page Life Cycle以获得更好的了解事件是如何烧制的。

最好的办法是尝试页OnInit or LoadViewstate事件的设定值。

+1

很好的回答。我会指出,主页实际上是页面的控制,而不是其他方式;)是的,违反直觉,我知道... – 2011-05-25 20:25:15

+0

据我了解的代码,该值必须设置,当按钮是点击。因此它不应该在OnInit事件中设置。我相信@ nickvane的回答是正确的。整个页面在控制事件发生后(例如点击)呈现。 – slfan 2011-05-25 21:36:17