|
主题: 如何在ASPX页Page_Load以外动态改变用户控件的值.
|
Lukiya
职务:普通成员
等级:1
金币:0.0
发贴:59
|
#12005/3/25 19:32:23
我定义了一个用户控件MessageBox。 有个属性是 private string _MsgHtml; public string MsgHtml { get { return _MsgHtml; } set { _MsgHtml = string; } }
放置到页面中了,ID设置为"MsgBox"
并在程序代码中实例化了 protected MessageBox MsgBox
在调用这个控件的ASPX文件的Page_Load中动态改变此属性成功。 MsgBox.Visible = true; MsgBox.MsgHtml = "我是例子字符串!"; 页面上有显示,一切正常。
然后有个按钮点击事件,需要在里面提示另外一条信息 MsgBox.Visible = true; MsbBox.MsgHtml = "我也是例子字符串!但是我显示不出来,郁闷!!!"; 结果无法显示……
经过调试和分析。得出以下结论。
放在Page_Load里能成功是因为ASPX文件的Page_Load先于ASCX文件执行。 所以可以称作“赋值后再显示”
而点击按钮事件先要回传一次页面。 所以ASPX和ASCX文件的Page_Load事件都已经发生了,但那时还没有赋值。 这时才轮到按钮事件执行。 所以可以称作“显示完成后再赋值”。 故无法显示动态赋予的内容。
但是我不知道VS2003自带的那些Web控件例如Label是如何做的处理。 为什么Label在我上面描述的状态下可以顺利动态显示呢?
莫非它包含一个刷新显示事件,只要值一改变,就触发事件?
如果是那样,该怎么写这个事件呢?
以上只是推理,不一定是对的。如果哪位高手有解决方法万望讲于小弟。
|
Lukiya
职务:普通成员
等级:1
金币:0.0
发贴:59
|
#22005/3/25 19:32:50
public MessageBox() { this._Width = Unit.Parse("100%"); this._TitleHtml = "提示信息"; this._MsgHtml = ""; this._TitleFontColor = "#ffffff"; this._TitleFontBold = "bold"; this._TitleBgColor = "#9999ff"; this._LineColor = Color.FromArgb(221,221,221); }
private void Page_Load(object sender, System.EventArgs e) { MsgPnl.Width = this._Width;
MsgTab.Rows[0].Cells[0].InnerHtml = this._TitleHtml; MsgTab.Rows[1].Cells[0].InnerHtml = this._MsgHtml;
MsgPnl.BackColor = this._LineColor;
MsgTab.Rows[0].Cells[0].Attributes.CssStyle.Add("background-color",this._TitleBgColor); MsgTab.Rows[0].Cells[0].Attributes.CssStyle.Add("font-weight",this._TitleFontBold); MsgTab.Rows[0].Cells[0].Attributes.CssStyle.Add("color",this._TitleFontColor); }
|
蓝鲸
职务:版主
等级:5
金币:42.1
发贴:2614
|
#32005/3/27 0:04:51
ASCX是用户控件UserControl,而Label是WEB控件WebControls
非常大鱼
|
Lukiya
职务:普通成员
等级:1
金币:0.0
发贴:59
|
#42005/3/28 19:49:13
那么我该怎么办呢??
|
蓝鲸
职务:版主
等级:5
金币:42.1
发贴:2614
|
#52005/3/29 0:30:07
做控件应继承自System.Web.UI.WebControls.WebControl或System.ComponentModel.Component
非常大鱼
|