我想改变控制值在主页面存在来自用户的控制和场景是这样的:
在我使用所谓的“CATID”查询字符串参数来获取类实体的用户控件的加载方法,那么我想设置的类别标题作为标题标签(类别标题)的值,它位于母版页中。
我试图改变用户控制网页负载控制的标题,但法师页面加载方法更早执行。如何从用户控件更改MasterPage中的控制值?
任何想法?
我想改变控制值在主页面存在来自用户的控制和场景是这样的:
在我使用所谓的“CATID”查询字符串参数来获取类实体的用户控件的加载方法,那么我想设置的类别标题作为标题标签(类别标题)的值,它位于母版页中。
我试图改变用户控制网页负载控制的标题,但法师页面加载方法更早执行。如何从用户控件更改MasterPage中的控制值?
任何想法?
提供您的母版,设置标题,例如一个公共方法:
public void setTitle(string title)
{
this.LblTitle.Text = title;
}
然后你可以从你的用户控件调用它(YourMasterPage
是实际类型的母版的):
((YourMasterPage)this.Page.Master).setTitle("new Title");
如果这是你应该能够阅读“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;
}
((Label)Master.FindControl("loadlbl")).Text = "your text";
这是一个绝对可怕的做法。完全违反了“分离关注”原则等等。用户控件不应该改变母版页,页面应该。此外,用户控制应该不知道它的放置位置。你拥有的方式不过是紧密的耦合。 – Mrchief
@Mrchief:+1但UserControls的目的并不总是分离和可重用性,但有时封装和简化。在这种情况下,UserControl本身采用页面作为控制器的角色,页面只控制包含UserControls的可见性。考虑f.e. [延迟加载一个TabContainer的的TabPanels](http://mattberseth.com/blog/2007/07/how_to_lazyload_tabpanels_with.html)其中所有面板包含具有页面的全部功能一个用户控件的场景。 –
@Tim:这是正确的用户控制这里采用page..there的角色是唯一一个在我的项目的aspx它控制取决于查询参数的用户控件的可见性。 – Dabbas