JavaScriptはどのようにSessionを制御しますか?

5157 ワード

このタイトルを見て、JavaScriptはクライアントを代表していますが、Sessionはサーバを代表しています.
        まず需要を言います.権限管理をする時、あるモジュールをクリックする時に、Sessionの中でモジュールコードを変える必要があります.この操作を実現するのはaタグです.もちろん、linkbuttonが同時にページを移動したり、Sessionを修正したりできるかどうかは分かりません.もし誰かがデモをしたらメッセージで説明してくれます.
        aラベル、ページのジャンプを実現して、彼のonclick事件、実行するのもこのページの中のjs方法で、今テーマの説明した問題に帰りました.――JavaScript方法を書いて、Sessionを修正させます.
        実はこの例は難しくないですが、個人的な意味は普通ではないです.この例は私の大部分のAJAXに対する恐怖を解消しました.
        まず、一般的な処理プログラム(つまり、サービスエンドコード)を書きます.
        説明が必要なのは、Sessionを修正するには、名前空間を追加的に導入し、インターフェースを実現する必要があるということです.        
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;

namespace TGB.CJX
{
    /// <summary>
    ///   Session
    /// </summary>
    public class ModifySession : IHttpHandler,IRequiresSessionState
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            context.Session["modelID"]=context.Request.QueryString["session"].ToString();
            //context.Session["modelID"] = "1";
            //context.Response.Write(context.Session["modelID"]);

        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
        上で実現した機能は簡単ですか?
        以下、クライアントコードです.
        var xmlhttp;
        var session;
        function submit(obj) {
            //session = obj.id.substr(1, 1);
            session = obj.id.replace("model","");
            //IE7,IE8,FF,MOZILLA,SAFARI
            if (window.XMLHttpRequest) {
                //alert("IE7,IE8,FF,MOZILLA,SAFARI");
                xmlhttp = new XMLHttpRequest();
                if (xmlhttp.overrideMinmeType) {
                    xmlhttp.overrideMinmeType("text/xml");
                }
            } else if (window.ActiveXObject) {
                //alert("IE5,IE6");
                var activeName = ["MSXML2.XMLHTTP", "Miscrosoft.XMLHTTP"];

                for (var i = 0; i < activeName.length; i++) {
                    try {
                        xmlhttp = new ActiveXObject(activeName[i]);
                        break;
                    } catch (e) {
                        return;
                    }
                }
            }

            if (xmlhttp == undefined || xmlhttp == null) {
                alert("          XMLHTTPREQUEST  ,      ");
                return;
            }

            xmlhttp.onreadystatechange = callback;

            xmlhttp.open("GET", "ModifySession.ashx?session=" + session, true);
            xmlhttp.send(null);
        }

        function callback() {
            //             ,               
            if (xmlhttp.readyState == 4) {
                //            
                if (xmlhttp.status == 200) {
                    //alert("       ");
                    return;
                }
            }
        }
        コールバック関数では、テストが正常にデータに戻る文だけを書きましたが、後でコメントが落ちました.
        aラベルバインディングイベントの時、最初に使ったのは文字列をつなぎ合わせる方法です.データベースからモジュールIDとモジュール名を調べて、次の文を通して文をつづり合わせます.
StringBuilder sbModel = new StringBuilder();
            //              
            for (int i = 0; i < dtModel.Rows.Count; i++)
            {
                sbModel.Append("<li><a id='model" + dtModel.Rows[0]["mdlID"].ToString() + "' href='SpaceWeb.aspx' target='_parent'  runat='server' onclick='submit(this)'>" + dtModel.Rows[i]["mdlName"].ToString() + "</a></li>");
            }
        しかし、このように書いたのは間違いやすいです.コピーする前にテスト文を書いて、変数を書くところですが、このように書いた文は調整が難しいです.
        他の人と交流しているうちに、Repeatコントロールについて話して、はっと悟りました.私が繰り返しているこの過程は、Repeatコントロールがすることではないですか?コントロールは私達のためにしました.なぜ自分でこんな間違いやすいコードを書く必要がありますか?
<asp:Repeater runat="server" id="rptModel">
                            <ItemTemplate>
                                <li><a id='model'+'<%#Eval("mdlID")%>' href="SpaceWeb.aspx" target="_parent" runat="server" onclick="submit(this)"><%#Eval("mdlName" %></a></li>
                            </ItemTemplate>
                        </asp:Repeater>
        このように書いて、感じははっきりしていますか?前のつづり文字列のため、そして実現しました.Repeatを使うのは一つの考えだけです.idでつづり合わせたらまた問題があるかどうか分かりません.もし問題があれば、斧を歓迎します.
        これまで、私の第一篇のAJAXに関する文章は書き終わりました.AJAXに対する理解は始まりの一つです.これはデータのインタラクションに関連していないので、いくつかの知識に対する説明はまだ青白いです.勉強が進むにつれて、AJAXの使用については、udatepanelやtimerなどのコントロールだけにとどまることはありません.いくつかの難しい例については、自分でやったほうがいいです.
        この例については、LinkButtonを使って実際に実現できると聞いてもいいです.何でこんなに面倒をかけるのですか?しかし、私は最初からLinkButtonが解決できるとは思っていませんでした.自分で問題を複雑にしました.この中にはページのジャンプがあります.自分の作った小さなボケでAJAXに対する理解が促進されました.何がいいことではないですか?
        AJAXの理解については、まだまだ一歩進んでいますが、何か間違いがあれば、積極的にコメントをお願いします.