aspxとascx,ashxの使い方のまとめ

6758 ワード

aspをするNet開発の対.aspx,.ascxと.ashxはよく知られていません.それらについては、ネット上で多くの文章が紹介されています.「紙の上は浅く感じて、このことは絶対にお辞儀をしなければならないことを知っています」と、自分でまとめてメモを取ります.
1、.aspxWebフォームデザインページ.Webフォームページは、ビジュアル要素(html、サーバコントロール、静的テキスト)とページのプログラミングロジック(VSのデザインビューとコードビューで対応するファイルがそれぞれ表示されます)の2つの部分で構成されています.VSはこの2つのコンポーネントをそれぞれ1つの個別のファイルに格納する.視覚要素は.aspxファイルで作成します.
2、.ascxasp.Netのユーザコントロールは,特定の機能と動作(この2つがWebアプリケーションの各種ページに用いられる)をカプセル化したWebページとして開発されている.1つのユーザコントロールはhtml、コード、その他のWebまたはユーザコントロールの組み合わせを含む、Webサーバ上に独自のファイル形式で保存され、その拡張子は*である.ascx.asp.Netのデフォルトの構成では、Webクライアントがurlを通じてこれらのファイルにアクセスすることはできませんが、このサイトの他のページはこれらのファイルに含まれる機能を統合することができます.
3、.ashxの前の2つはよく知っていて、これこそ話すポイントです.
(1)使用例.ashxファイルは主にweb handlerを書くために使用されます.使用するashxは、関連するWebテクノロジーにかかわらずプログラミングに専念することができます.私たちはよく知っています.aspxはhtmlコントロールツリーの解析を行います.aspxに含まれるすべてのhtmlは実際にはクラスであり、すべてのhtmlはクラスのメンバーであり、このプロセスは.ashxは不要です.ashxはIsReusable属性(この属性は多重化可能か否かを表す、通常はtrueである)を含む必要があり、ashxファイルでSessionを使用する場合はIrequiresSessionStateインタフェースを実装する必要がある.簡単なインプリメンテーションでログインユーザーパスワードを変更する例:
 
  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.SessionState;

namespace Test
{

    public class HandlerTest : IHttpHandler, IRequiresSessionState
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ClearContent();
            context.Response.ContentType = "text/plain";
            context.Response.Cache.SetCacheability(HttpCacheability.NoCache); //

            string action = context.Request.Params["action"]; //
            if (action == "modifyPwd") //
            {
                string oldPwd = context.Request.Params["pwd"];

                // ashx Session IRequiresSessionState
                //Session["LogedUser"] , test
                if (oldPwd.ToUpper() != ((context.Session["LogedUser"]) as Customer).Password.ToUpper()) //
                {
                    context.Response.Write(" !");
                }
                else
                {
                    context.Response.Write(" !");
                }
            }


            context.Response.End();
        }

        public bool IsReusable
        {
            get
            {
                return true;
            }
        }
    }
}


クライアントの呼び出し(jsとページセクション):
 
  




    mytest
    <br>        function $(s) { if (document.getElementById) { return eval('document.getElementById("' + s + '")'); } else { return eval('document.all.' + s); } }</p> <p>        function createXMLHTTP() {<br>            var xmlHttp = false;<br>            var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",<br>                         "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",<br>                         "Microsoft.XMLHTTP"];<br>            for (var i = 0; i < arrSignatures.length; i++) {<br>                try {<br>                    xmlHttp = new ActiveXObject(arrSignatures[i]);<br>                    return xmlHttp;<br>                }<br>                catch (oError) {<br>                    xmlHttp = false; //ignore<br>                }<br>            }<br>            // throw new Error("MSXML is not installed on your system."); <br>            if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {<br>                xmlHttp = new XMLHttpRequest();<br>            }<br>            return xmlHttp;<br>        }</p> <p>        var xmlReq = createXMLHTTP();</p> <p>        // ajax ( )<br>        function validateOldPwd(oTxt) {<br>            var url = "/HandlerTest.ashx?action=modifyPwd&pwd=" + escape(oTxt.value); //.ashx <br>            xmlReq.open("get", url, true);<br>            xmlReq.setRequestHeader("If-Modified-Since", "0");<br>            xmlReq.onreadystatechange = callBack;<br>            xmlReq.send(url); // <br>        }</p> <p>        function callBack() {<br>            if (xmlReq.readyState == 4) {<br>                if (xmlReq.status == 200) {<br>                    alert(xmlReq.responseText); // <br>                }<br>                else if (xmlReq.status == 404) {<br>                    alert("Requested URL is not found.");<br>                } else if (xmlReq.status == 403) {<br>                    alert("Access denied.");<br>                } else<br>                    alert("status is " + xmlReq.status);<br>            }<br>        }</p> <p>   



   

   

       
   

   




分析:a、以前は簡単なaspxファイルで実現されていた機能ですが、ashxでもいいです.
筆者が書いたajax:データ伝送方式の概要を比較すると、aspxはフロントバックグラウンドの表示と処理ロジックを分けることに気づいたので、2つのファイルになったが、実際には、最終的にコンパイルするとき、aspxとcsは同じクラスにコンパイルされる.この中でhtmlのいくつかの論理処理を設計します.ashxとは異なり、Web httpリクエストに対して直接戻りたい結果を返すだけです.aspxよりhtmlを処理するプロセスは少ない(しかしashxはhtmlのいくつかの論理を処理することができて、ただ通常はすべてこのように使いません).理論的にはashxはaspxより速い.
b、やはり同じ古い文の中で、私达はデータの伝送のいくつかの方式を知っていて、実はashxはすべて実现することができて(ashxファイルの中でcontext.Response.contentTypeを修正すればいい)、ここではもう赘述しません.
(2)ashxは特に動的ピクチャの生成,動的テキスト(純テキスト,json,xml,javascriptなど)の生成に適している.
(3).ashxファイルには、コントロールの再送イベントを処理するのが面倒なという欠点があります.データの再送を処理するには、通常いくつかが必要である.aspxページの機能は、自分でこれらの機能を手動で処理するだけです(aspxファイルを直接作成して処理するほうがいいです).したがって、一般的に用いる.ashxは、再送処理を必要としない項目を出力すればよい.
4、aspx-->P(Page)ascx-->C(Control)ashx-->H(HttpHandler)をまとめる
ブラウザがwebサーバにアクセスすると、最終的にhtmlテキストを受信します.ブラウザはレンダリングエンジンでこれらのラベルを説明し、画面に表示される効果を示します.そしてasp.Netはただ私达が応用する1种のプラットフォームの技术でhtmlを“変相”して解釈して、はっきり言ってそれは生产性を高めるためで、その技术用语は更に多くて、本质的にやはりhtmlの范囲内のものです(もしあなたはあれらのダイナミックなページの技术を通じてhtmlとブラウザー(もちろんjsを含む)の技术を完全に利用してダイナミックなページの効果を実现しないならば、あなたは効果がコードの量があってもかなり大きいことを発见することができます).だからweb開発の下層はhtmlラベルの山で、aspにかかわらず.Netもjspもhtmlに何らかの形で包装されており、htmlの産物です.