WebFormベース1

4321 ワード

aspxファイル:
aspxファイル(新規作成項目->Webフォーム)というファイルは、ほとんどいかなるC〓文(当時のASPのような)を書き込むことができますが、強く推奨しません。このようなページは文法が混ざっていて、管理が難しいです。aspxでは[%]の内容とrunal=serverの内容以外はそのまま出力されます。aspxの中で<%>の中にC〓のコードを埋め込むことができて、aspx.csファイルの中のC〓のコードのようです、すべて<%>の中で書くことができます。しかし、このようにすることを勧めません。aspxでは、ページの現在位置に「%=表現%」を使用して表式を出力します。表式は、方法、属性、フィールドとすることができます。書くことを忘れないでください。aspx目的は他のテンプレートエンジンのように、すべて簡略化された綴り文字列です。
サンプルコード:
aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:CheckBox Text="    " runat="server" Name="IsShow" ID="IsShow" AutoPostBack="True"
            OnCheckedChanged="Unnamed1_CheckedChanged" />
        <% 
            if (IsShowHelloWorld())
            {      //     C#  ,    C#     
        %>
        <br />     <%--   html  ,        --%>
        <br />
        <br />
        <span style='color: red'>
            <%=GetHelloWorld() %>
        </span>
        <% 
            }      //     C#  ,    if           。
        %>
    </div>
    </form>
</body>
</html>
aspx.cs:
 public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected bool isShowHelloWorld;
        protected bool IsShowHelloWorld()
        {
            return isShowHelloWorld;
        }

        protected string GetHelloWorld()
        {
            return "  ";
        }

        protected void Unnamed1_CheckedChanged(object sender, EventArgs e)
        {
            if (IsShow.Checked)
            {
                isShowHelloWorld = true;
            }
            else
                isShowHelloWorld = false;
        }
    }
aspxとasxの関係
aspxは特殊なasxであり、aspxに対応するクラスはPageであり、PageはIHttpHandlerインターフェースを実現しています。
だからaspxは高級なHttpHandlerだと言えます。aspxは多くの操作をカプセル化してくれます。私たちは馬鹿化して開発することができます。
shax(HttpHandler)、aspx(Page)
aspx、aspx.cs関係はWebFormのページで以下のコードを実行します。
protected void WriteType()
        {
            Response.Write(this.GetType() + "<br/>");
            Response.Write(this.GetType().Assembly.Location + "<br/>");
            Response.Write(this.GetType().BaseType + "<br/>");
            Response.Write(this.GetType().BaseType.Assembly.Location + "<br/>");
        }
出力:
ASP.webform 1_aspx C:\Windows\Microsoft.NET\Frame ebook\v 4.0.3 0319\Temporary AS.NET Files\root\d 6 e 1812 d\9 a 75 c 48 f\Ap_Web_d3 gkj 0 nc.dll WebApple 1.WebForm 1 C:\Windows\Microsoft.NET\Framweork\v 4.0.3219\Temporary AS.NET Files\root\d 6 e 1812 d\9 a 75 c 48 f\assmbly\dl 3\3 c 414925\ad1 d 900 u 0026 quot;4830 cf 01\WebApple 1.DLL
現在実行されているページのクラス名はASP.webform 1_です。aspxのような類名、
父類こそWebApple 6.WebForm 1です。ILSpyやReflecttorなどを使ってdllを開いたり、逆コンパイルしたりすると、WebApplication 6.WebForm 1はVSコンパイラで作成したaspx.cs類であることが分かりました。
逆コンパイルの内容には先端ページのhtmlコードがありません。
ASP.webform 1_aspxはWebApple 6.WebForm 1のサブクラスを継承しています。ASP.webform 1_aspxコードは、aspxコンテンツに基づいて動的に生成されるウェブページコンテンツを構築するクラスである。
親の書き換え方法、
protected override void Fraamew orkInitialize()
Fraameweork Initialize()メソッドで呼び出します。
prvate void_u 0026 quot;BulldControl Tree(webform 1 uaspx_ctrl)
コントロールツリーを構築します
aspxの中でC〓を使って書いたコードは全部  _Renderform 1方法では、コーディングをレンダリングします。
prvate void_u 0026 quot;Render form 1(Html TextWriter_w、Control parameterContiner)
以上のように、aspxは最終的に一つのクラスを生成します。このクラスはaspx.csから継承されたクラスです。逆コンパイル後のコードを見ると、コンパイルが普通の.NETコードを生成し、コードの中でスプライスを作成しています。aspxで生成されるコードはcsクラスのサブクラスです。だから分かりました。
なぜ「aspxでcsを呼び出すメンバーのレベルはprotectedまたはpublicでなければいけません。prvateではいけません。」なぜ「aspxではaspx.csのメンバーの方法と属性が呼び出されますか?」
抜粋:ポッドキャストhttp://net.itcast.cn/