asp.Netベース——2

5716 ワード

前言:昨日自分のノートをブログに書かなかったので、添付します.
divでの数値の増加を実現するには、次の手順に従います.
1.htmlファイルを新規作成する
1 <form action="div  .ashx">

2 <input type="hidden" name="isPostBack" value="true" />

3 <input type="hidden" name="IncValue"value="@value" />

4 <input type="submit"  value="  " />

5 <div>@value</div>

注意:3行目には、valueの値が
のinnerTextと同じである非表示フィールドが設定されています.
ashxファイルを新規作成
 1 context.Response.ContentType = "text/plain";

 2         string fullpath = context.Server.MapPath("div  .htm");

 3         string content = System.IO.File.ReadAllText(fullpath);

 4         string isPostBack=context.Request["isPostBack"];

 5         string IncValue=context.Request["IncValue"];

 6         if (isPostBack == "true")

 7         {

 8             int i = Convert.ToInt32(IncValue);

 9             i++;

10             IncValue= i.ToString();

11  

12         }

13         else

14         {

15             IncValue = "0";

16         }

17        content= content.Replace("@value",IncValue);

18         context.Response.Write(content);

前のブログではisPostBackの役割について話しましたが、今はあまり話しません.今お話しします
なぜdivを使ってサーバで値が取れないのですか?サーバがクライアントのウェブページを読み取るのではなく,ブラウザがクライアントがフォームに入力したフィールドを収集し,要求パラメータを形成して武器処理プログラムに送るため,divの現在のinnerTextをサーバに送らなかったため,すべてのサーバが現在の値を知ることができなかった.
divのinnerTextをサーバに値上げする方法も考えないでください.nameが設定されたinput、textarea、selectのvalue属性値だけがサーバに提出されるからです.だから新しいのです.htmのページには、ブラウザがサーバに渡すパラメータを記録する隠しフィールドが書かれており、プレースホルダ@valueでサーバがブラウザに返す結果を受信し、開発者ツールでコードの中で
のinnerTextを修正し、自増ボタンをクリックすると、ブラウザはdivの値をサーバに提出しません.逆に、開発者ツールで非表示フィールドのvalue値をコードで変更すると、ブラウザがサーバにコミットする値も変わります.
フォーム以外の要素ではクライアントの要素をサーバ側に渡すことができず、フォーム要素でもvalue値しか渡すことができず、背景色やサイズなどの他の属性値でも渡すことができないため、これらの値には非表示フィールドが存在する、これがaspである.NetにおけるViewStateの実現原理.