2011-07-30 51 views
3

我想改变控制值在主页面存在来自用户的控制和场景是这样的:
在我使用所谓的“CATID”查询字符串参数来获取类实体的用户控件的加载方法,那么我想设置的类别标题作为标题标签(类别标题)的值,它位于母版页中。
我试图改变用户控制网页负载控制的标题,但法师页面加载方法更早执行。如何从用户控件更改MasterPage中的控制值?

任何想法?

+2

这是一个绝对可怕的做法。完全违反了“分离关注”原则等等。用户控件不应该改变母版页,页面应该。此外,用户控制应该不知道它的放置位置。你拥有的方式不过是紧密的耦合。 – Mrchief

+1

@Mrchief:+1但UserControls的目的并不总是分离和可重用性,但有时封装和简化。在这种情况下,UserControl本身采用页面作为控制器的角色,页面只控制包含UserControls的可见性。考虑f.e. [延迟加载一个TabContainer的的TabPanels](http://mattberseth.com/blog/2007/07/how_to_lazyload_tabpanels_with.html)其中所有面板包含具有页面的全部功能一个用户控件的场景。 –

+0

@Tim:这是正确的用户控制这里采用page..there的角色是唯一一个在我的项目的aspx它控制取决于查询参数的用户控件的可见性。 – Dabbas

回答

10

提供您的母版,设置标题,例如一个公共方法:

public void setTitle(string title) 
{ 
    this.LblTitle.Text = title; 
} 

然后你可以从你的用户控件调用它(YourMasterPage是实际类型的母版的):

((YourMasterPage)this.Page.Master).setTitle("new Title"); 
0

如果这是你应该能够阅读“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; 
} 
+0

您的权利我可以做到这一点,但如果我在母版页中获得类别实体,并且我已经在用户控件中获得它,它将不会很好。 – Dabbas

+0

这是好的,但它不会工作,因为我加载了default.aspx中没有标题标签的用户控件...只是容器和一些其他标签...标题标签是在母版页 – Dabbas

0
((Label)Master.FindControl("loadlbl")).Text = "your text"; 
相关问题