C# 如何从用户控件更改母版页中的控件值?

C# 如何从用户控件更改母版页中的控件值?,c#,.net,asp.net,C#,.net,Asp.net,我想从用户控件更改母版页中存在的控件值,场景如下: 在用户控件加载方法中,我使用一个名为“catID”的查询字符串参数来获取类别实体,然后我想将类别标题设置为位于母版页中的标题标签(类别标题)的值。 我试图更改用户控件页面加载控件中的标题,但母版页加载方法执行得更早 有什么想法吗?如果它是一个查询字符串参数,您应该能够读取“catId”,即从母版页代码中读取,并设置标题 编辑: 然后尝试一个属性: 在用户控制中 protected void Page_Load(object sender, Ev

我想从用户控件更改母版页中存在的控件值,场景如下:
在用户控件加载方法中,我使用一个名为“catID”的查询字符串参数来获取类别实体,然后我想将类别标题设置为位于母版页中的标题标签(类别标题)的值。
我试图更改用户控件页面加载控件中的标题,但母版页加载方法执行得更早


有什么想法吗?

如果它是一个查询字符串参数,您应该能够读取“catId”,即从母版页代码中读取,并设置标题

编辑:

然后尝试一个属性: 在用户控制中

protected void Page_Load(object sender, EventArgs e)
{
    this.MyTitle = "SomeTitle";
}
public string MyTitle { get; set; }
在母版页上:

protected void Page_Load(object sender, EventArgs e)
{
    WebUserControl.PreRender += new EventHandler(WebUserControl_PreRender);
}

void WebUserControl_PreRender(object sender, EventArgs e)
{
    string str = WebUserControl.MyTitle;
    this.Header.Title = str;
}

在母版页中提供设置标题的公共方法,例如:

public void setTitle(string title)
{
    this.LblTitle.Text = title;
}
然后可以从用户控件调用它(
YourMasterPage
是母版页的实际类型):


你的权利,我可以这样做,但如果我在母版页中获得类别实体,并且我已经在用户控件中获得了它,那么它将不好。这是好的,但它将不起作用,因为我将用户控件加载到default.aspx中,它没有标题标记。。。只有容器和一些其他标签。。。标题标签在母版页中这是一个绝对可怕的做法。完全违反了“关注点分离”原则以及其他许多原则。用户控件不应更改母版页,而应更改该页。此外,用户控件应该不知道它放在哪里。您拥有它的方式只不过是紧密耦合。@Mrchief:+1但是UserControls的目的并不总是分离和可重用,有时是封装和简化。在这种情况下,UserControl本身采用页面作为控制器的角色,而页面只控制包含UserControl的可见性。考虑F.E.所有面板都包含一个具有页面完整功能的用户控件的场景。@提姆:没错,这里的用户控件采用页面的角色。在我的项目中只有一个ASPX,它根据查询参数来控制用户控件的可见性。
((YourMasterPage)this.Page.Master).setTitle("new Title");
 ((Label)Master.FindControl("loadlbl")).Text = "your text";