TO: smoothwood(I try my best) 能不能照着 keanu1978(黄金安魂曲) 的样子重写一个 Page_PreRender 看看,
TO: bitsbird(一瓢.net) 谢谢你的解答,请你好好看看我的问题,我的控件里并没有什么事件 ------------------------------------------------------------------------ 按 huangsuipeng(hsp-ec.net) 的说发 Page_Render 是什么时候执行呢 ?
wuc.ascx ___________________________________________ <%@ Control Language="vb" AutoEventWireup="false" Codebehind="wuc.ascx.vb" Inherits="WebApplication6.wuc" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %> <asp:Label id="Label1" runat="server">label</asp:Label> _______________________________________________ webForm.aspx ________________________________________________ Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load tc1.setdata("page_load") End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click tc1.setdata("on_click") End Sub ———————————————————————————————————— WEBFORM的HTML部分 ———————————————————————————————————— <%@ Register TagPrefix="TestControl" TagName="tc" src="wuc.ascx" %>
还有就是 smoothwood(I try my best) 给的用 VB.NET 例子也是行的,为什么只有我的不行? 没天理了
是不是正验证了 http://www.dotnetjunkies.com/tutorial/3443CE54-E56C-476F-88A2-5F811A79880C.dcik 所说的, “As we left off I mentioned that you could work with properties and methods exposed in user controls that are not precompiled, but you must use reflection. ”
-------------------------------------
在a.ascx.cs中
-------------------------------------
string text = String.Empty;
public string Text
{
get{return text;}
set{text = value;}
}protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
if(Text != String.Empty)
this.Label1.Text = text; base.Render (writer);
}------------------------------
在放置控件的页面的HTML代码中
------------------------------
<uc1:a id="A1" runat="server" Text="Page_Load"></uc1:a></P>其余问题尚在考虑
ON_INIT
ON_INIT
PAGE_LOAD
PAGE_LOAD
ASPX ASCX
ON_INIT
ON_INIT
PAGE_LOAD
PAGE_LOAD
ASPX 选发生 Page_Load 那么,我在 PageLoad 里的
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
A1.SetData("Page_Load");
}
就应该把Label1 的值改为 "Page_load",事实不是这样
----------------------------------------------------------
to smoothwood(I try my best)
页面载入时候 ,Label1显示的确实就是 Label 而不是 "Page_load"
能不能照着 keanu1978(黄金安魂曲) 的样子重写一个 Page_PreRender 看看,
------------------------------------------------------------------------
按 huangsuipeng(hsp-ec.net) 的说发 Page_Render 是什么时候执行呢 ?
___________________________________________
<%@ Control Language="vb" AutoEventWireup="false" Codebehind="wuc.ascx.vb" Inherits="WebApplication6.wuc" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<asp:Label id="Label1" runat="server">label</asp:Label>
_______________________________________________
webForm.aspx
________________________________________________
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
tc1.setdata("page_load")
End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
tc1.setdata("on_click")
End Sub
————————————————————————————————————
WEBFORM的HTML部分
————————————————————————————————————
<%@ Register TagPrefix="TestControl" TagName="tc" src="wuc.ascx" %>
A1.SetData("Page_load");放在Page_Init中 就可以了
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
A1.SetData("Page_load");
InitializeComponent();
base.OnInit(e);
}
-------------------------------------------------------------------
问题虽然解决了,但我仍然百思不得其解,A1.SetData("Page_load"); 这个语句无论放在
base.OnInit(e);前或者 base.OnInit(e); 后效果都是一样的,为什么这个方法只能在
overide OnInit(EventArgs e) 这里的时候才有用呢?我明天结贴,
不过我仍然希望能有真正的高手站出来说出个原因来。
override protected void OnInit(EventArgs e){}
中以后,在别的方法中调用 A1.SetData 就不管用了,也就是说在PostBack以后 OnInit 又重新运行了,这可怎么办呢?
public void SetLabel(string s)
{
Label1.Text = s;
}
</script>
<asp:Label id="Label1" runat="server" />2. TestLabel.aspx:<%@ Register TagName="ASCX" TagPrefix="my" src="TestLabel.ascx" %><form runat="server">
<my:ASCX id="A1" runat="server" />
<asp:Button id="btn" runat="server" Text="Set Value" OnClick="Button_Click"/>
<asp:Button id="btn2" runat="server" Text="Refresh"/>
</form><script language="C#" runat="server">
void Page_Load(Object sender, EventArgs e)
{
if (!IsPostBack)
A1.SetLabel("Page_Load");
}void Button_Click(Object sender, EventArgs e)
{
A1.SetLabel("Button_Click");
}
</script>
上面是我的两个文件 ,不信你们看看,思归的代码是网页代码在一起的,我用的是codebehind 方式,可就是不行?
http://www.dotnetjunkies.com/tutorial/3443CE54-E56C-476F-88A2-5F811A79880C.dcik
所说的,
“As we left off I mentioned that you could work with properties and methods exposed in user controls that are not precompiled, but you must use reflection. ”
我可以下载啊
protected gm.a A1=new gm.a();调用时,这句的错误 ,不应该再实例化了。
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
}
#endregion
另外发现你的窗体的load事件的勾子掉了。
private void InitializeComponent()
{
this.Load+=new EventHandler(Page_Load); //这一句话没了
}
而且,我有一个正在做的网页,还有一个示例网页,这两个页中的 this.Load+=new EventHandler(Page_Load); 这一句都没了,所以才能将错误重现,我不知道是不是我无意间删掉了,不过,两个网页都是我删掉的可能性不是太大吧。我很郁闷。
问题解决了,感谢各位老大的关注,
我现在才感觉到贴出代码的重要性,不然让我说出来的话,是怎么也找不到原因的。谢谢。
可用分不多了,大家见谅。