對比復習下JSP
1、jsp的本質是Servlet ,會在第一次被訪問時會被翻譯成一個類文件,從此對這個頁面的訪問都是由這個類文件執行后進行輸出。
aspx 本質是IHttpHandler
2、jsp模版元素: 頁面中書寫的Html內容,直接被響應輸出到瀏覽器上。
3、jsp表達式 : <%= 表達式%> , 計算出表達式的值后,直接被響應輸出到瀏覽器。
4、jsp腳本片段: <% 若干語句%>, 在翻譯過來的類中,直接被復制黏貼到對應的位置執行。
5、jsp聲明 : <%! 若干java語句%> 在翻譯過來的Servlet中會被放置到和Service方法同級的位置,成為類的一個成員。
aspx 中 使用 <script runat='server'></script>或者code-behind(雙文件ASP.net頁面)實現。
6、jsp注解:
<%--注解的內容--%> 被jsp注解注釋掉的內容,在jsp翻譯引擎將JSP翻譯成Servlet的過程中會被丟棄,在翻譯過來的Servlet中沒有這些信息。
<%//Java注釋 %> 屬於腳本片段,將被復制到Servlet中,在 .java文件被翻譯成 .class 文件時被丟棄。
<!-- html 注解 --> 被當做模板元素,輸出到瀏覽器上。
7、jsp指令:<%@ 指令名稱 屬性=。。。%>, 為jsp引擎而設計,並不直接產生任何可見輸出,而只是告訴引擎如何處理jsp頁面中的其余部分。
ASP.Net Web Form
<%@ Page Language="C#" %> 單頁面形式(僅頁面呈現文件 xxx.aspx)
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="WebApplication1.WebForm2" %>
website項目中的 雙頁面形式(頁面呈現文件 xxx.aspx, 代碼隱藏文件 xxx.aspx.cs)
或 web application項目中 三頁面形式(xxx.aspx,xxx.aspx.cs,xxx.aspx.designer.cs)
視圖狀態

http是無狀態協議,asp.net通過__VIEWSTATE 這個隱藏域在多次頁面請求直接為asp控件保存狀態值。默認情況下ASP.NET中得每個控件都啟用了試圖狀態,所有控件的屬性值都保存在這一隱藏域中,每個控件都有個EnableViewState屬性,可以禁用該控件的視圖狀態,也可以用指令禁用頁面中的視圖狀態,或者在web.config中禁用整站的視圖狀態。
除了視圖狀態外,.net2.0 另增加了控件狀態(Control State)用於保存控件的臨界狀態值,如GridView使用它保存被選中行的信息,即便視圖狀態被禁,依然可以記得哪一行被選中。
動態編譯
當請求一個asp.net頁面時,asp.net framework會檢測這個頁面對應的.net類,不存在則自動把這個頁面編譯為一個新類(程序集),保存在\windows\Microsoft.Net\Framework\v2.0.50727\Temporary ASP.NET Files。此后任何對該頁面的修改,對應的.net類都會被自動刪除,下次請求時再重新編譯。與asp頁面不同的是,asp.net頁面不會在每次被請求時都進行解析和編譯。
可以使用aspnet_compiler.exe預編譯整個asp.net應用程序,可以避免用戶第一次請求頁面時的編譯延時。
通過CompilationMode屬性可以禁用單個頁面,一個文件夾下的頁面乃至整站的動態編譯。當網站有數千個頁面,又不願為每個頁面向內存中加載程序集時,禁用編譯就很有用處。CompilationMode=Never,頁面僅在運行時被解釋。其中包含服務端代碼(<script runat='server'></script>代碼塊)的頁面不能禁止編譯。
雙文件Asp.net頁面的編譯
雙文件Asp.net頁面的兩個部分是部分類和繼承關系的聯合,部分類的技術是.net2.0后才出現的,在.net1.x中,雙文件Asp.net頁面的編譯生成兩個類,分別對應代碼隱藏文件和頁面呈現文件,二者通過類繼承聯系在一起。繼承是一種單向關系,所有在呈現文件中聲明的文件,在父類(代碼隱藏文件)中也必需聲明,且ID必需一致。否則繼承關系將被打斷,控件引發的事件將不會被代碼隱藏文件處理。
而在2.0后,為了兼容之前的1.x版本,實際編譯生成的是3個類。
1. 一個類對應代碼隱藏文件(一個部分類,內容與原xxx.aspx.cs文件一致)。
2. 一個類中包含控件聲明,內容類似xxx.aspx.designer.cs文件,同樣也是部分類。負責將在子類(xxx.aspx文件)中聲明的runat='server'的服務器控件自動在父類中注冊一個同名的成員。
public partial class mtdl_Admin_Business : System.Web.SessionState.IRequiresSessionState {
protected global::ASP.mtdl_mt_title_ascx mt_title;
protected global::ASP.mtdl_mt_left_ascx mt_left;
protected global::System.Web.UI.WebControls.LinkButton LinkButton_FB;
protected global::System.Web.UI.WebControls.LinkButton LinkButton_CX;
protected global::System.Web.UI.WebControls.Repeater Repeater1;
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
protected global::ASP.mtdl_mt_bottom_ascx mt_bottom;
protected System.Web.Profile.DefaultProfile Profile {
get {
return ((System.Web.Profile.DefaultProfile)(this.Context.Profile));
}
}
protected ASP.global_asax ApplicationInstance {
get {
return ((ASP.global_asax)(this.Context.ApplicationInstance));
}
}
}
2. 最后一個類則由xxx.aspx文件轉換而來的子類
namespace ASP
{
[System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()]
public class mtdl_tem_sys_admin_business_aspx : global::mtdl_Admin_Business, System.Web.IHttpHandler
{
private static bool @__initialized;
private static object @__stringResource;
private static object @__fileDependencies;
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public mtdl_tem_sys_admin_business_aspx()
{
string[] dependencies;
((global::System.Web.UI.Page)(this)).AppRelativeVirtualPath = "~/mtdl/tem_sys/Admin_Business.aspx";
if ((global::ASP.mtdl_tem_sys_admin_business_aspx.@__initialized == false))
{
global::ASP.mtdl_tem_sys_admin_business_aspx.@__stringResource = this.ReadStringResource();
dependencies = new string[10];
dependencies[0] = "~/mtdl/mt_title.ascx.cs";
dependencies[1] = "~/mtdl/mt_title.ascx";
dependencies[2] = "~/mtdl/tem_sys/Admin_Business.aspx.cs";
dependencies[3] = "~/mtdl/mt_iframe_path.ascx.cs";
dependencies[4] = "~/mtdl/mt_iframe_path.ascx";
dependencies[5] = "~/mtdl/mt_bottom.ascx";
dependencies[6] = "~/mtdl/mt_left.ascx";
dependencies[7] = "~/mtdl/mt_bottom.ascx.cs";
dependencies[8] = "~/mtdl/tem_sys/Admin_Business.aspx";
dependencies[9] = "~/mtdl/mt_left.ascx.cs";
global::ASP.mtdl_tem_sys_admin_business_aspx.@__fileDependencies = this.GetWrappedFileDependencies(dependencies);
global::ASP.mtdl_tem_sys_admin_business_aspx.@__initialized = true;
}
this.Server.ScriptTimeout = 30000000;
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
private global::ASP.mtdl_mt_title_ascx @__BuildControlmt_title()
{
global::ASP.mtdl_mt_title_ascx @__ctrl;
@__ctrl = new global::ASP.mtdl_mt_title_ascx();
this.mt_title = @__ctrl;
@__ctrl.InitializeAsUserControl(this.Page);
@__ctrl.ID = "mt_title";
return @__ctrl;
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
private global::ASP.mtdl_mt_left_ascx @__BuildControlmt_left()
{
global::ASP.mtdl_mt_left_ascx @__ctrl;
@__ctrl = new global::ASP.mtdl_mt_left_ascx();
this.mt_left = @__ctrl;
@__ctrl.InitializeAsUserControl(this.Page);
@__ctrl.ID = "mt_left";
return @__ctrl;
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
private global::System.Web.UI.WebControls.LinkButton @__BuildControlLinkButton_FB()
{
global::System.Web.UI.WebControls.LinkButton @__ctrl;
@__ctrl = new global::System.Web.UI.WebControls.LinkButton();
this.LinkButton_FB = @__ctrl;
@__ctrl.ApplyStyleSheetSkin(this);
@__ctrl.ID = "LinkButton_FB";
((System.Web.UI.IAttributeAccessor)(@__ctrl)).SetAttribute("class", "f");
System.Web.UI.IParserAccessor @__parser = ((System.Web.UI.IParserAccessor)(@__ctrl));
@__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("發布"));
@__ctrl.Click += new System.EventHandler(this.LinkButton_FB_Click);
return @__ctrl;
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
private global::System.Web.UI.WebControls.LinkButton @__BuildControlLinkButton_CX()
{
global::System.Web.UI.WebControls.LinkButton @__ctrl;
@__ctrl = new global::System.Web.UI.WebControls.LinkButton();
this.LinkButton_CX = @__ctrl;
@__ctrl.ApplyStyleSheetSkin(this);
@__ctrl.ID = "LinkButton_CX";
((System.Web.UI.IAttributeAccessor)(@__ctrl)).SetAttribute("class", "c");
System.Web.UI.IParserAccessor @__parser = ((System.Web.UI.IParserAccessor)(@__ctrl));
@__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("撤銷發布"));
@__ctrl.Click += new System.EventHandler(this.LinkButton_CX_Click);
return @__ctrl;
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
private global::System.Web.UI.WebControls.CheckBox @__BuildControl__control3()
{
global::System.Web.UI.WebControls.CheckBox @__ctrl;
@__ctrl = new global::System.Web.UI.WebControls.CheckBox();
@__ctrl.TemplateControl = this;
@__ctrl.ApplyStyleSheetSkin(this);
@__ctrl.ID = "chkItem";
return @__ctrl;
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
private global::System.Web.UI.WebControls.HiddenField @__BuildControl__control4()
{
global::System.Web.UI.WebControls.HiddenField @__ctrl;
@__ctrl = new global::System.Web.UI.WebControls.HiddenField();
@__ctrl.TemplateControl = this;
@__ctrl.ID = "infosid";
@__ctrl.DataBinding += new System.EventHandler(this.@__DataBinding__control4);
return @__ctrl;
}
public void @__DataBinding__control4(object sender, System.EventArgs e)
{
System.Web.UI.WebControls.HiddenField dataBindingExpressionBuilderTarget;
System.Web.UI.WebControls.RepeaterItem Container;
dataBindingExpressionBuilderTarget = ((System.Web.UI.WebControls.HiddenField)(sender));
Container = ((System.Web.UI.WebControls.RepeaterItem)(dataBindingExpressionBuilderTarget.BindingContainer));
dataBindingExpressionBuilderTarget.Value = global::System.Convert.ToString(Eval("id"), global::System.Globalization.CultureInfo.CurrentCulture);
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
private global::System.Web.UI.DataBoundLiteralControl @__BuildControl__control5()
{
global::System.Web.UI.DataBoundLiteralControl @__ctrl;
@__ctrl = new global::System.Web.UI.DataBoundLiteralControl(6, 5);
@__ctrl.TemplateControl = this;
@__ctrl.SetStaticString(0, "\r\n </td>\r\n " +
" <td><a style=\"color:#12619D;\" hr" +
"ef=\"javascript:openDetail(\'");
@__ctrl.SetStaticString(1, "\')\"> ");
@__ctrl.SetStaticString(2, "</a></td>\r\n <td> " +
"");
@__ctrl.SetStaticString(3, "</td>\r\n <td align=\"cen" +
"ter\"><a style=\"color:#12619D;\" href=\"Admin_Func.aspx?glid=");
@__ctrl.SetStaticString(4, "\">查看(");
@__ctrl.SetStaticString(5, ")</a></td>\r\n <td> " +
";");
@__ctrl.DataBinding += new System.EventHandler(this.@__DataBind__control5);
return @__ctrl;
}
public void @__DataBind__control5(object sender, System.EventArgs e)
{
System.Web.UI.WebControls.RepeaterItem Container;
System.Web.UI.DataBoundLiteralControl target;
target = ((System.Web.UI.DataBoundLiteralControl)(sender));
Container = ((System.Web.UI.WebControls.RepeaterItem)(target.BindingContainer));
target.SetDataBoundString(0, global::System.Convert.ToString(Eval("id"), global::System.Globalization.CultureInfo.CurrentCulture));
target.SetDataBoundString(1, global::System.Convert.ToString(Eval("annotation"), global::System.Globalization.CultureInfo.CurrentCulture));
target.SetDataBoundString(2, global::System.Convert.ToString(Eval("name"), global::System.Globalization.CultureInfo.CurrentCulture));
target.SetDataBoundString(3, global::System.Convert.ToString(Eval("id"), global::System.Globalization.CultureInfo.CurrentCulture));
target.SetDataBoundString(4, global::System.Convert.ToString(Eval("num"), global::System.Globalization.CultureInfo.CurrentCulture));
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
private global::System.Web.UI.DataBoundLiteralControl @__BuildControl__control6()
{
global::System.Web.UI.DataBoundLiteralControl @__ctrl;
@__ctrl = new global::System.Web.UI.DataBoundLiteralControl(4, 3);
@__ctrl.TemplateControl = this;
@__ctrl.SetStaticString(0, "</td>\r\n <td align=\"cen" +
"ter\"><img src=\'");
@__ctrl.SetStaticString(1, "\' /></td>\r\n <td align=" +
"\"center\">");
@__ctrl.SetStaticString(2, "</td>\r\n <td> ");
@__ctrl.SetStaticString(3, "</td>\r\n <td align=\"cen" +
"ter\" >\r\n ");
@__ctrl.DataBinding += new System.EventHandler(this.@__DataBind__control6);
return @__ctrl;
}
public void @__DataBind__control6(object sender, System.EventArgs e)
{
System.Web.UI.WebControls.RepeaterItem Container;
System.Web.UI.DataBoundLiteralControl target;
target = ((System.Web.UI.DataBoundLiteralControl)(sender));
Container = ((System.Web.UI.WebControls.RepeaterItem)(target.BindingContainer));
target.SetDataBoundString(0, global::System.Convert.ToString((Eval("n_is_active") + "" == "1" ? "../images/d.gif" : "../images/c.gif"), global::System.Globalization.CultureInfo.CurrentCulture));
target.SetDataBoundString(1, global::System.Convert.ToString(Eval("d_mode_date", "{0:d}"), global::System.Globalization.CultureInfo.CurrentCulture));
target.SetDataBoundString(2, global::System.Convert.ToString(Eval("c_editer"), global::System.Globalization.CultureInfo.CurrentCulture));
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
private global::System.Web.UI.WebControls.LinkButton @__BuildControl__control7()
{
global::System.Web.UI.WebControls.LinkButton @__ctrl;
@__ctrl = new global::System.Web.UI.WebControls.LinkButton();
@__ctrl.TemplateControl = this;
@__ctrl.ApplyStyleSheetSkin(this);
((System.Web.UI.IAttributeAccessor)(@__ctrl)).SetAttribute("style", "color:red;");
@__ctrl.OnClientClick = "return confirm(\'確認刪除嗎?刪除后不可恢復!\');";
@__ctrl.CausesValidation = false;
System.Web.UI.IParserAccessor @__parser = ((System.Web.UI.IParserAccessor)(@__ctrl));
@__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("刪除"));
@__ctrl.DataBinding += new System.EventHandler(this.@__DataBinding__control7);
@__ctrl.Click += new System.EventHandler(this.btnDel_Click);
return @__ctrl;
}
public void @__DataBinding__control7(object sender, System.EventArgs e)
{
System.Web.UI.WebControls.LinkButton dataBindingExpressionBuilderTarget;
System.Web.UI.WebControls.RepeaterItem Container;
dataBindingExpressionBuilderTarget = ((System.Web.UI.WebControls.LinkButton)(sender));
Container = ((System.Web.UI.WebControls.RepeaterItem)(dataBindingExpressionBuilderTarget.BindingContainer));
dataBindingExpressionBuilderTarget.CommandName = global::System.Convert.ToString(Eval("id"), global::System.Globalization.CultureInfo.CurrentCulture);
dataBindingExpressionBuilderTarget.Visible = ((bool)(GetCanDelete(Eval("num"))));
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
private global::System.Web.UI.WebControls.LinkButton @__BuildControl__control8()
{
global::System.Web.UI.WebControls.LinkButton @__ctrl;
@__ctrl = new global::System.Web.UI.WebControls.LinkButton();
@__ctrl.TemplateControl = this;
@__ctrl.ApplyStyleSheetSkin(this);
@__ctrl.ID = "LiButton1";
System.Web.UI.IParserAccessor @__parser = ((System.Web.UI.IParserAccessor)(@__ctrl));
@__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("<img src=\"../images/s.gif\" alt=\"↑\"/>"));
@__ctrl.DataBinding += new System.EventHandler(this.@__DataBinding__control8);
@__ctrl.Click += new System.EventHandler(this.Sort_Click);
return @__ctrl;
}
public void @__DataBinding__control8(object sender, System.EventArgs e)
{
System.Web.UI.WebControls.LinkButton dataBindingExpressionBuilderTarget;
System.Web.UI.WebControls.RepeaterItem Container;
dataBindingExpressionBuilderTarget = ((System.Web.UI.WebControls.LinkButton)(sender));
Container = ((System.Web.UI.WebControls.RepeaterItem)(dataBindingExpressionBuilderTarget.BindingContainer));
dataBindingExpressionBuilderTarget.CommandName = global::System.Convert.ToString(Eval("id"), global::System.Globalization.CultureInfo.CurrentCulture);
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
private global::System.Web.UI.WebControls.LinkButton @__BuildControl__control9()
{
global::System.Web.UI.WebControls.LinkButton @__ctrl;
@__ctrl = new global::System.Web.UI.WebControls.LinkButton();
@__ctrl.TemplateControl = this;
@__ctrl.ApplyStyleSheetSkin(this);
@__ctrl.ID = "LinkButton2";
System.Web.UI.IParserAccessor @__parser = ((System.Web.UI.IParserAccessor)(@__ctrl));
@__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("<img src=\"../images/x.gif\" alt=\"↓\"/>"));
@__ctrl.DataBinding += new System.EventHandler(this.@__DataBinding__control9);
@__ctrl.Click += new System.EventHandler(this.Sort_Click);
return @__ctrl;
}
public void @__DataBinding__control9(object sender, System.EventArgs e)
{
System.Web.UI.WebControls.LinkButton dataBindingExpressionBuilderTarget;
System.Web.UI.WebControls.RepeaterItem Container;
dataBindingExpressionBuilderTarget = ((System.Web.UI.WebControls.LinkButton)(sender));
Container = ((System.Web.UI.WebControls.RepeaterItem)(dataBindingExpressionBuilderTarget.BindingContainer));
dataBindingExpressionBuilderTarget.CommandName = global::System.Convert.ToString(Eval("id"), global::System.Globalization.CultureInfo.CurrentCulture);
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
private void @__BuildControl__control2(System.Web.UI.Control @__ctrl)
{
global::System.Web.UI.WebControls.CheckBox @__ctrl1;
@__ctrl1 = this.@__BuildControl__control3();
System.Web.UI.IParserAccessor @__parser = ((System.Web.UI.IParserAccessor)(@__ctrl));
@__parser.AddParsedSubObject(@__ctrl1);
global::System.Web.UI.WebControls.HiddenField @__ctrl2;
@__ctrl2 = this.@__BuildControl__control4();
@__parser.AddParsedSubObject(@__ctrl2);
global::System.Web.UI.DataBoundLiteralControl @__ctrl3;
@__ctrl3 = this.@__BuildControl__control5();
@__parser.AddParsedSubObject(@__ctrl3);
global::System.Web.UI.DataBoundLiteralControl @__ctrl4;
@__ctrl4 = this.@__BuildControl__control6();
@__parser.AddParsedSubObject(@__ctrl4);
global::System.Web.UI.WebControls.LinkButton @__ctrl5;
@__ctrl5 = this.@__BuildControl__control7();
@__parser.AddParsedSubObject(@__ctrl5);
global::System.Web.UI.WebControls.LinkButton @__ctrl6;
@__ctrl6 = this.@__BuildControl__control8();
@__parser.AddParsedSubObject(@__ctrl6);
global::System.Web.UI.WebControls.LinkButton @__ctrl7;
@__ctrl7 = this.@__BuildControl__control9();
@__parser.AddParsedSubObject(@__ctrl7);
@__ctrl.SetRenderMethodDelegate(new System.Web.UI.RenderMethod(this.@__Render__control2));
}
private void @__Render__control2(System.Web.UI.HtmlTextWriter @__w, System.Web.UI.Control parameterContainer)
{
this.WriteUTF8ResourceString(@__w, 9226, 390, true);
parameterContainer.Controls[0].RenderControl(@__w);
@__w.Write("\r\n ");
parameterContainer.Controls[1].RenderControl(@__w);
parameterContainer.Controls[2].RenderControl(@__w);
@__w.Write(GetPlatform());
parameterContainer.Controls[3].RenderControl(@__w);
parameterContainer.Controls[4].RenderControl(@__w);
@__w.Write("\r\n </td>\r\n " +
" <td>\r\n " +
" ");
parameterContainer.Controls[5].RenderControl(@__w);
@__w.Write("\r\n ");
parameterContainer.Controls[6].RenderControl(@__w);
@__w.Write("\r\n </td>\r\n " +
" </tr>\r\n " +
" ");
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
private global::System.Web.UI.WebControls.Repeater @__BuildControlRepeater1()
{
global::System.Web.UI.WebControls.Repeater @__ctrl;
@__ctrl = new global::System.Web.UI.WebControls.Repeater();
this.Repeater1 = @__ctrl;
@__ctrl.ItemTemplate = new System.Web.UI.CompiledTemplateBuilder(new System.Web.UI.BuildTemplateMethod(this.@__BuildControl__control2));
@__ctrl.ID = "Repeater1";
return @__ctrl;
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
private global::System.Web.UI.HtmlControls.HtmlForm @__BuildControlform1()
{
global::System.Web.UI.HtmlControls.HtmlForm @__ctrl;
@__ctrl = new global::System.Web.UI.HtmlControls.HtmlForm();
this.form1 = @__ctrl;
@__ctrl.ID = "form1";
global::System.Web.UI.WebControls.LinkButton @__ctrl1;
@__ctrl1 = this.@__BuildControlLinkButton_FB();
System.Web.UI.IParserAccessor @__parser = ((System.Web.UI.IParserAccessor)(@__ctrl));
@__parser.AddParsedSubObject(@__ctrl1);
global::System.Web.UI.WebControls.LinkButton @__ctrl2;
@__ctrl2 = this.@__BuildControlLinkButton_CX();
@__parser.AddParsedSubObject(@__ctrl2);
global::System.Web.UI.WebControls.Repeater @__ctrl3;
@__ctrl3 = this.@__BuildControlRepeater1();
@__parser.AddParsedSubObject(@__ctrl3);
@__ctrl.SetRenderMethodDelegate(new System.Web.UI.RenderMethod(this.@__Renderform1));
return @__ctrl;
}
private void @__Renderform1(System.Web.UI.HtmlTextWriter @__w, System.Web.UI.Control parameterContainer)
{
this.WriteUTF8ResourceString(@__w, 9616, 852, false);
parameterContainer.Controls[0].RenderControl(@__w);
@__w.Write("</li>\r\n <li>");
parameterContainer.Controls[1].RenderControl(@__w);
this.WriteUTF8ResourceString(@__w, 10468, 2885, false);
parameterContainer.Controls[2].RenderControl(@__w);
@__w.Write("\r\n </table>\r\n\r\n " +
" </div>\r\n\r\n ");
if (pagecount > 0)
{
@__w.Write("\r\n <div class=\"fy\">\r\n " +
" <div class=\"fyn\">\r\n " +
" <ul>\r\n ");
@__w.Write(pagoutstr);
@__w.Write("\r\n </ul>\r\n " +
" </div>\r\n </div>\r\n " +
" ");
}
@__w.Write("\r\n </td>\r\n </tr" +
">\r\n </table>\r\n </td>\r\n " +
" </tr>\r\n </tbody>\r\n </table>\r\n ");
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
private global::ASP.mtdl_mt_bottom_ascx @__BuildControlmt_bottom()
{
global::ASP.mtdl_mt_bottom_ascx @__ctrl;
@__ctrl = new global::ASP.mtdl_mt_bottom_ascx();
this.mt_bottom = @__ctrl;
@__ctrl.InitializeAsUserControl(this.Page);
@__ctrl.ID = "mt_bottom";
return @__ctrl;
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
private void @__BuildControlTree(mtdl_tem_sys_admin_business_aspx @__ctrl)
{
@__ctrl.EnableViewStateMac = false;
this.InitializeCulture();
global::ASP.mtdl_mt_title_ascx @__ctrl1;
@__ctrl1 = this.@__BuildControlmt_title();
System.Web.UI.IParserAccessor @__parser = ((System.Web.UI.IParserAccessor)(@__ctrl));
@__parser.AddParsedSubObject(@__ctrl1);
global::ASP.mtdl_mt_left_ascx @__ctrl2;
@__ctrl2 = this.@__BuildControlmt_left();
@__parser.AddParsedSubObject(@__ctrl2);
global::System.Web.UI.HtmlControls.HtmlForm @__ctrl3;
@__ctrl3 = this.@__BuildControlform1();
@__parser.AddParsedSubObject(@__ctrl3);
global::ASP.mtdl_mt_bottom_ascx @__ctrl4;
@__ctrl4 = this.@__BuildControlmt_bottom();
@__parser.AddParsedSubObject(@__ctrl4);
@__ctrl.SetRenderMethodDelegate(new System.Web.UI.RenderMethod(this.@__Render__control1));
}
private void @__Render__control1(System.Web.UI.HtmlTextWriter @__w, System.Web.UI.Control parameterContainer)
{
this.WriteUTF8ResourceString(@__w, 13353, 875, false);
@__w.Write(glid);
this.WriteUTF8ResourceString(@__w, 14228, 463, false);
parameterContainer.Controls[0].RenderControl(@__w);
@__w.Write("\r\n ");
parameterContainer.Controls[1].RenderControl(@__w);
@__w.Write("\r\n <div id=\"mtcontainer\" class=\"container_scroll\">\r\n ");
parameterContainer.Controls[2].RenderControl(@__w);
@__w.Write("\r\n </div>\r\n ");
parameterContainer.Controls[3].RenderControl(@__w);
@__w.Write("\r\n</body>\r\n</html>");
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
protected override void FrameworkInitialize()
{
base.FrameworkInitialize();
this.SetStringResourcePointer(global::ASP.mtdl_tem_sys_admin_business_aspx.@__stringResource, 0);
this.@__BuildControlTree(this);
this.AddWrappedFileDependencies(global::ASP.mtdl_tem_sys_admin_business_aspx.@__fileDependencies);
this.Request.ValidateInput();
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public override int GetTypeHashCode()
{
return -1338025651;
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public override void ProcessRequest(System.Web.HttpContext context)
{
base.ProcessRequest(context);
}
}
}
eg:

若干頁面一組,會被編譯為一個dll,並自動匹配了一個簡單工廠
//------------------------------------------------------------------------------
// <auto-generated>
// 此代碼由工具生成。
// 運行時版本:4.0.30319.17929
//
// 對此文件的更改可能會導致不正確的行為,並且如果
// 重新生成代碼,這些更改將會丟失。
// </auto-generated>
//------------------------------------------------------------------------------
[assembly: System.CodeDom.Compiler.GeneratedCodeAttribute("ASP.NET", "4.0.30319.17929")]
[assembly: System.Security.SecurityRulesAttribute(System.Security.SecurityRuleSet.Level2)]
[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0")]
namespace @__ASP {
internal class FastObjectFactory_app_web_1x3iilvw {
#line 1 "c:\\dummy.txt"
#line default
#line hidden
private FastObjectFactory_app_web_1x3iilvw() {
}
static object Create_ASP_mtdl_tem_sys_admin_business_add_aspx() {
return new ASP.mtdl_tem_sys_admin_business_add_aspx();
}
static object Create_ASP_mtdl_tem_sys_managerlevel_aspx() {
return new ASP.mtdl_tem_sys_managerlevel_aspx();
}
static object Create_ASP_mtdl_tem_sys_admin_role_aspx() {
return new ASP.mtdl_tem_sys_admin_role_aspx();
}
static object Create_ASP_mtdl_tem_sys_admin_config_aspx() {
return new ASP.mtdl_tem_sys_admin_config_aspx();
}
static object Create_ASP_mtdl_tem_sys_admin_business_aspx() {
return new ASP.mtdl_tem_sys_admin_business_aspx();
}
}
}
也包括App_Code文件夾下的類(App_Code沒有匹配實例化工廠), global.asax文件也是一樣的處理方式


控件樹
生成的類繼承自System.Web.UI.Page,asp.net framework 調用 void ProcessRequest(System.Web.HttpContext context)方法顯示頁面,這個方法構建頁面的控件樹。
控件樹的根節點是Page本身,asp.net頁面中的所有元素都會被轉換到.net類中,其中html和純文本用LiteralControl呈現,可以用FindControl(ID)查找控件。
頁面執行生命周期
public partial class Default2 : System.Web.UI.Page
{
protected int i = 1;
protected void Page_PreInit(object sender, EventArgs e)
{
Response.Write(i + ".PreInit:當頁面初始化開始時發生");
i++;
Response.Write("<br>");
}
protected void Page_Init(object sender, EventArgs e)
{
Response.Write(i + ".Init:當頁面初始化時發生");
i++;
Response.Write("<br>");
}
protected void Page_InitComplete(object sender, EventArgs e)
{
Response.Write(i + ".InitComplete:當頁初始化完成時發生");
i++;
Response.Write("<br>");
}
protected void Page_PreLoad(object sender, EventArgs e)
{
Response.Write(i + ".PreLoad:當頁load事件前發生");
i++;
Response.Write("<br>");
}
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(i + ".Load:當服務器控件加載到Page對象中時發生(加載頁面時)");
i++;
Response.Write("<br>");
//在Load和LoadComplete之間會執行控件事件.
//如 Button 控件的 Click 事件或 TextBox 控件的 TextChanged 事件。
}
protected void Page_LoadComplete(object sender, EventArgs e)
{
Response.Write(i + ".LoadComplete:當頁面生命周期的加載階段結束時發生");
i++;
Response.Write("<br>");
}
protected void Page_PreRender(object sender, EventArgs e)
{
Response.Write(i + ".PreRender:當頁加載控件之后,呈現之前發生,使用該事件對頁或其控件的內容進行最后更改(預呈現)");
i++;
Response.Write("<br>");
}
protected void Page_PreRenderComplete(object sender, EventArgs e)
{
Response.Write(i + ".PreRenderComplete:呈現內容前發生.(預呈現完成)");
i++;
Response.Write("<br>");
}
protected void Page_SaveStateComplete(object sender, EventArgs e)
{
/*網頁上控件的狀態信息是在 PreRenderComplete 事件后保存的。
在SaveStateComplete事件之前用Trace查看頁時其實在該事件前還有
一個SaveState事件,只是這里無法演示.
注意:SaveStateComplete 事件在將頁和頁上控件的視圖狀態和控件狀態保存到持久性介質之后引發。
這是在頁被呈現到請求瀏覽器之前引發的最后一個事件。*/
Response.Write(i + ".SaveStateComplete:在頁已完成對頁和頁上控件的所有視圖狀態和控件狀態信息的保存后發生.");
i++;
Response.Write("<br>");
/*最后一部操作
呈現:Render:
它不是事件;在處理的這個階段,Page 對象會在每個控件上調用此方法Render()。
所有 ASP.NET Web 服務器控件都有一個用於寫出發送給瀏覽器的控件標記的 Render 方法。*/
/*當你關閉頁面的時候就會引發UnLoad(當服務器控件從內存中卸載時發生)
和Disposed兩事件(當從內存釋放服務器控件時發生,這是服務器控件生存期的最后階段)
首先加載UnLoad事件:卸載頁面:完全呈現頁、將頁發送至客戶端並准備丟棄時,
將調用卸載。此時,將卸載頁屬性(如Response和Request)並執行清理.
最后加載Disposed事件,釋放資源,生命周期結束....
*/
}
}
一般最常操作的是Page_Load 和Page_PreRender,二者區別在於前者發生在所有控件事件之前,后者發生在所有控件事件之后
asp.net頁面默認開啟了AutoEventWireup
從瀏覽器頁面觸發的事件不能立刻在本地得到處理,而是POST至服務器上,因此,Asp.NET建立了委托(代理)機制。在建立一個事件的同時,建立相應的委托:
private void InitializeComponent()
{
this.mybutton.Click += new System.EventHandler(this.Button1_Click);//委托
}
ASP.NET 頁框架支持以自動方式將頁事件與方法相關聯。如果 Page 指令的 AutoEventWireup 屬性被設置為 true,該頁框架將自動調用頁事件,即 Page_Init 和 Page_Load 等方法。在這種情況下,不需要任何顯式的 Handles 子句或委托。
如果將 AutoEventWireup 設置為 true,Visual Studio 將生成用於綁定事件的代碼,頁框架將自動基於事件的名稱來調用事件。
開發人員可以利用該參數避免編寫過多的鏈接代碼。如果該屬性設置為"false",則代碼應改為:
private void InitializeComponent()
{
this.mybutton.Click += new System.EventHandler(this.Button1_Click);//委托
this.Load += new System.EventHandler(this.Page_Load);//可以用AutoEventWireup屬性避免的委托
}
但大部分情況下,頁面不需要關聯如此多的特殊事件,會增加額外的操作和系統開銷。同時, ASP.NET 頁框架自動調用事件處理的方法基於其預定名稱,這會導致到相同事件處理方法當頁運行被調用兩次,也會增大系統開銷。因此,Microsoft 建議始終將 AutoEventWireup 設置為 FALSE。同樣 AutoEventWireup 並不能對所有頁面事件有效,比如Page_InitComplete()事件就不支持它。
調試
指令Dedug="true"
調試位於遠程服務器端的asp.net應用程序時,還要禁掉自定義錯誤<compilation Dedug="true" /><customErrors mode="off"/>
為頁面或應用程序啟用調試,調試模式下編譯器不會進行某些性能優化,所以正式運營前要確認禁用了調試
System.Web部分中增加 <deployment retail="true"/>: 禁調試默認,允許遠程自定義錯誤並禁止跟蹤。
跟蹤頁面執行Trace="true"
當想要輸出頁面執行的跟蹤信息,就要為頁面或整個程序啟用跟蹤
當<%@ Page %>指令包含Trace="true"屬性時,這個屬性啟用跟蹤並將跟蹤信息附在頁面的底部。
可以在代碼的任意位置 主動調用Trace.Warn()方法添加一條跟蹤信息到跟蹤信息區,所以可以用跟蹤來診斷頁面的錯誤
頁面跟蹤的缺點是任何人都能看到跟蹤信息。
程序級跟蹤
web.config :
<configuration>
<system.net>
<trace enabled="true" localOnly="false" writeToDiagnosticsTrace="true" mostRecent="true"/>
</system.net>
</configuration>
啟用程序級跟蹤后,只在訪問特殊頁面Trace.axd時才會顯示跟蹤信息(顯示啟用程序級跟蹤后的10次頁面請求)
遠程服務端需要為trace節點 添加localOnly="false"屬性,就算禁用了頁面級跟蹤,用Trace.Warn()所寫的信息也可以通過Trace.axd查看。
使用writeToDiagnosticsTrace屬性可以把所有跟蹤信息輸出到Visual Web Developer的輸出窗口
使用mostRecent屬性可以顯示最新的10次頁面請求,而不啟用這一屬性,那么在10次頁面請求后,跟蹤將自動停止。
通過添加斷點
這個只適用於本地調試
