主题:  如何在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


非常大鱼