Przeglądaj źródła

Control.cs: Figured out some undocumented API.

svn path=/trunk/mcs/; revision=658
Bob Smith 24 lat temu
rodzic
commit
32cee6c01e

+ 1 - 0
mcs/class/System.Web/System.Web.UI/ChangeLog

@@ -1,4 +1,5 @@
 2001-08-28  Bob Smith  <[email protected]>
+        * Control.cs: Figured out some undocumented API.
         * Added TODO.
         * BuildMethod.cs: Initial implementation.
         * BuildTemplateMethod.cs: Initial implementation.

+ 76 - 2
mcs/class/System.Web/System.Web.UI/Control.cs

@@ -8,11 +8,11 @@
 //
 
 //notes: view state only tracks changes after OnInit method is executed for the page request. You can read from it at any time, but cant write to it during rendering.
-//more notes: look at the private on* methods for initialization order. they will help.
 //even more notes: view state info in trackviewstate method description. read later.
 //Ok, enough notes: what the heck is different between enable view state, and track view state.
 //Well, maybe not. How does the ViewState know when to track changes? Does it look at the property
 //on the owning control, or does it have a method/property of its own that gets called?
+// I think this last question is solved in the Interface for it. Look into this.
 
 //cycle:
 //init is called when control is first created.
@@ -23,11 +23,54 @@
 //raisepostbackevent if ipostbackeventhandler is implemented.
 //prerender is called when the server is about to render its page object
 //SaveViewState is called.
-//Dispose disposed/unload not sure but is last.
+//Unload then dispose it apears. :)
 
 //Naming Container MUST have some methods. What are they? No clue. Help?
 
 //read this later. http://gotdotnet.com/quickstart/aspplus/
+//This to: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguidnf/html/cpconattributesdesign-timesupport.asp
+//http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguidnf/html/cpcontracefunctionality.asp
+
+// Isnt life grand? :)
+// See the undocumented methods? Gota love um. ;)
+// ASP.test4_aspx.Page_Load(Object Sender, EventArgs e) in \\genfs2\www24\bobsmith11\test4.aspx:6
+// System.Web.UI.Control.OnLoad(EventArgs e) +67
+// System.Web.UI.Control.LoadRecursive() +73
+// System.Web.UI.Page.ProcessRequestMain() +394
+
+// ASP.test4_aspx.Page_Unload(Object Sender, EventArgs e) in \\genfs2\www24\bobsmith11\test4.aspx:6
+// System.EventHandler.Invoke(Object sender, EventArgs e) +0
+// System.Web.UI.Control.OnUnload(EventArgs e) +67
+// System.Web.UI.Control.UnloadRecursive(Boolean dispose) +78
+// System.Web.UI.Page.ProcessRequest() +194
+// System.Web.UI.Page.ProcessRequest(HttpContext context) +18
+// System.Web.CallHandlerExecutionStep.Execute() +179
+// System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +87
+
+
+// ASP.test4_aspx.Page_Unload(Object Sender, EventArgs e) in \\genfs2\www24\bobsmith11\test4.aspx:6
+// System.Web.UI.Control.OnUnload(EventArgs e) +67
+// System.Web.UI.Control.UnloadRecursive(Boolean dispose) +78
+// System.Web.UI.Page.ProcessRequest() 
+
+// ASP.test4_aspx.Page_Kill(Object Sender, EventArgs e) in \\genfs2\www24\bobsmith11\test4.aspx:6
+// System.Web.UI.Control.OnPreRender(EventArgs e) +67
+// System.Web.UI.Control.PreRenderRecursiveInternal() +61
+// System.Web.UI.Page.ProcessRequestMain() +753
+
+// ASP.test4_aspx.OnInit(EventArgs e) in \\genfs2\www24\bobsmith11\test4.aspx:6
+// System.Web.UI.Control.InitRecursive(Control namingContainer) +202
+// System.Web.UI.Page.ProcessRequestMain() +120
+
+// ASP.test4_aspx.SaveViewState() in \\genfs2\www24\bobsmith11\test4.aspx:12
+// System.Web.UI.Control.SaveViewStateRecursive() +51
+// System.Web.UI.Page.SavePageViewState() +174
+// System.Web.UI.Page.ProcessRequestMain() +861
+
+// ASP.test_aspx.LoadViewState(Object t) +28
+// System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +125
+// System.Web.UI.Page.LoadPageViewState() +182
+// System.Web.UI.Page.ProcessRequestMain() +256
 
 using System;
 using System.Web;
@@ -460,5 +503,36 @@ namespace System.Web.UI
                 {
                         _renderMethodDelegate = renderMethod;
                 }
+                protected void LoadRecursive()
+                {
+                        OnLoad(EventArgs.Empty);
+                        if (_controls != null) foreach (Control c in _controls) c.LoadRecursive();
+                }
+                protected void UnloadRecursive(Boolean dispose)
+                {
+                        OnUnload(EventArgs.Empty);
+                        if (_controls != null) foreach (Control c in _controls) c.UnloadRecursive();
+                        if (dispose) Dispose();
+                }
+                protected void PreRenderRecursiveInternal()
+                {
+                        OnPreRender(EventArgs.Empty);
+                        if (_controls != null) foreach (Control c in _controls) c.PreRenderRecursiveInternal();
+                }
+                protected void InitRecursive(Control namingContainer)
+                {
+                        if (_controls != null) foreach (Control c in _controls) c.InitRecursive(namingContainer);
+                        OnInit(EventArgs.Empty);
+                }
+                protected object SaveViewStateRecursive()
+                {
+                        //TODO
+                }
+                protected void LoadViewStateRecursive(Object savedState)
+                {
+                        //TODO
+                }
+                //TODO: I think there are some needed Interface implementations to do here.
+                //TODO: Find api for INamingContainer.
         }
 }

+ 119 - 0
mcs/class/System.Web/Test/test4.aspx

@@ -0,0 +1,119 @@
+<%@ Page Language="C#" Debug="true" %>
+<html>
+<head>
+<script language="C#" runat="server">
+//    protected override void OnInit(EventArgs e){
+//      throw new Exception();
+//    }
+    protected override void LoadViewState(object savedState){
+      throw new Exception();
+    }
+    protected override object SaveViewState(){
+      throw new Exception();
+    }
+    void Page_Kill(Object Sender, EventArgs e) {
+      throw new Exception();
+    }
+    protected override void OnInit(EventArgs e){
+      EnableViewState = true;
+      TrackViewState();
+      ViewState["test"] = "DIE!";
+    }
+    void Page_Load(Object Sender, EventArgs e) {
+//          ((Control)Sender).PreRender += new EventHandler(Page_Kill);
+          if (!IsPostBack) {
+             ArrayList values = new ArrayList();
+
+             values.Add(new PositionData("Microsoft", "Msft"));
+             values.Add(new PositionData("Intel", "Intc"));
+             values.Add(new PositionData("Dell", "Dell"));
+
+             Repeater1.DataSource = values;
+             Repeater1.DataBind();
+
+             Repeater2.DataSource = values;
+             Repeater2.DataBind();
+             Response.Write(Repeater1.Controls[0].ClientID);
+             Response.Write("<br>");
+             Response.Write(Repeater1.Controls[0].UniqueID);
+             Response.Write("<br>");
+          }
+       }
+
+       public class PositionData {
+
+          private string name;
+          private string ticker;
+
+          public PositionData(string name, string ticker) {
+             this.name = name;
+             this.ticker = ticker;
+          }
+
+          public string Name {
+             get {
+                return name;
+             }
+          }
+
+          public string Ticker {
+             get {
+                return ticker;
+             }
+          }
+       }
+
+    </script>
+
+</head>
+<body>
+
+<h3><font face="Verdana">Repeater Example</font></h3>
+
+<form runat=server>
+
+<b>Repeater1:</b>
+
+<p>
+
+<asp:Repeater id=Repeater1 runat="server">
+<HeaderTemplate>
+<table border=1>
+<tr>
+<td><b>Company</b></td>
+<td><b>Symbol</b></td>
+</tr>
+</HeaderTemplate>
+
+<ItemTemplate>
+<tr>
+<td> <%# DataBinder.Eval(Container.DataItem, "Name") %> <asp:label id="test"></td>
+<td> <%# DataBinder.Eval(Container.DataItem, "Ticker") %> </td>
+</tr>
+</ItemTemplate>
+
+<FooterTemplate>
+</table>
+</FooterTemplate>
+
+</asp:Repeater>
+<p>
+
+<b>Repeater2:</b>
+<p>
+<asp:Repeater id=Repeater2 runat="server">
+
+<HeaderTemplate>
+Company data:
+          </HeaderTemplate>
+
+<ItemTemplate>
+<%# DataBinder.Eval(Container.DataItem, "Name") %> (<%# DataBinder.Eval(Container.DataItem, "Ticker") %>)
+          </ItemTemplate>
+
+<SeparatorTemplate>, </SeparatorTemplate>
+</asp:Repeater>
+</form>
+</body>
+</html>
+