2010-11-22 15 views
0

このご参照ください:ASP.NETのHTML出力にはどのようなものがありますか?

ViewStateの "ID = "_ ViewStateの" 値="/wEPDwUKMTMzMTM1NTAzNA9kFgJmD2QWAgIDD2QWJgIDDw8WBB4LTmF2aWdhdGVVcmwFKGh0dHA6Ly93d3cubGVhcm5kZXZub3cuY29tL1Byb2R1Y3RzLmFzcHgeBFRleHQFCVN1YnNjcmliZWRkAgUPDxYCHwAFHWh0dHA6Ly9vbmxpbmUubGVhcm5kZXZub3cuY29tZGQCBw8PFgIfAAUnaHR0cDovL3d3dy5sZWFybmRldm5vdy5jb20vRGVmYXVsdC5hc3B4ZGQCCQ8PFgIfAAUoaHR0cDovL3d3dy5sZWFybmRldm5vdy5jb20vUHJvZHVjdHMuYXNweGRkAgsPDxYCHwAFJ2h0dHA6Ly93d3cubGVhcm5kZXZub3cuY29tL1NhbXBsZXMuYXNweGRkAg0PDxYCHwAFKWh0dHA6Ly93d3cubGVhcm5kZXZub3cuY29tL3N1YnNjcmliZS5hc3B4ZGQCDw8PFgIfAAUjaHR0cDovL3d3dy5sZWFybmRldm5vdy5jb20vRkFRLmFzcHhkZAIRDw8WAh8ABSxodHRwOi8v ........ (それが10倍大きいですが、私はそれを削除した)

を10

ASP.NETが生成するこのHTMLはありますか?そして、ASP.NET MVCも同様に機能しますか?

+0

グーグル「asp.net viewstate」 –

+3

ViewStateはスライスされたパン以来最高のものです! –

+1

ビューステートデータのサイズは注意深く管理する必要があります。あなたのページをすばやく追加して、本当に膨らませることができます。 – rboarman

答えて

8

これはViewStateと呼ばれます。

ASP.NET MVCはViewStateを生成しません。

+0

この場合、ASP.NET MVCはASP.NETサイトより速くなりますか?なぜなら、最終的なHMTLソースの行がたくさんあるからです! – Goma

+3

@Goma、技術的には、HTMLコードが小さいほど、ページサイズは軽くなります。スピードは可変で、多くの要因が帯域幅、クライアントのインターネット速度、サーバーのパフォーマンスなどのウェブサイトのパフォーマンスに影響を与える可能性があります。ビューステートを小さくすると、ブラウザがページの開始を解析するのに役立ちますが、MVCを必ずしもより良い製品。 –

3

ASP.Net MVCはviewstateを生成しませんが、必ずしも高速であるとは限りません。

まず、ASP.Net Webフォームのページにその多くのビューステートがあるとしたら、おそらく何か間違っているでしょう。ウェブフォームで大きなビューステートを避けるのは難しいことではありません。

第2に、webformsがviewstateに配置するものは、ほとんどの場合、mvcページが各リクエストで再構築する必要があるものを置き換えます。これは、帯域幅が追加のサーバーリソースを使用するよりも高価で低速である公衆インターネットサイトで、mvcが好んで働く傾向があります。あなたの会社のLAN上の私設イントラネットでは、ブラウザからWebサーバーまでのアップストリーム帯域幅が自由で豊富で速いWebフォームが好まれる傾向があります。

+0

Webフォームはウェブサイトのリソースを多く使い、それを遅くしますか? – Goma

+1

いいえ、データベースからユーザーのWebブラウザーにデータを移動します。時にはそれは遅く、時には速くなります。 –

1

Webフォームは、サーバーにポストバックするときにviewstateを使用して制御状態を維持します。たとえば、Webフォームにテキストボックスとボタンがあるとします。テキストボックスに何かを入力し、ボタンをクリックします。このボタンは、サーバーにポストバックを実行します。ページがリロードされるときに、サーバー側のコードでテキストボックスを自分でクリアしない限り、テキストボックスには、ボタンをクリックする前に入力したものはそのまま残ります。

実際には、テキストボックス内のデータは、非表示のビューステートフィールドに格納され、ページが更新されると再びテキストボックスに読み込まれました。ビューステートはbase64でエンコードされているので混乱しているように見えます。ビューステートに自分自身を手動で保存することもできます。あなたのページのPage_Loadイベントでこれだけの操作を行います。あなたは空白のWebフォーム上でこれをしなかった場合は、ページをロードするとき今

this.ViewState["someVariable"] = "some value"; 

を、あなたは(あなたが貼り付けられたようなHTMLでビューステートフィールドが表示されます非常に小さいものを除く)。その隠しフィールドから値をコピーし、ビューステートデコーダ(like this one)に貼り付けると、someVariableに値 "some value"が表示されます。

今すぐフォームにボタンを配置し、ボタンのクリックでも、次の操作を行います。

Response.Write(this.ViewState["someVariable"].ToString()); 

あなたがページ上に書かれた「何らかの値」を参照してくださいます。あなたが行ったのは、手動でビューステートに何かを保存し、それを隠しフィールドのページにレンダリングした後、その隠しフィールドをサーバーにポストバックし、そこから読み取ってデータを表示します。

これはWebフォームの主な機能です。 MVCはviewstateを使用しません。MVCはあなたの質問の範囲外になるモデルバインディングと呼ばれる別のテクニックに依存しています。 mvcが投稿間で情報を管理する方法の詳細については、Googleの「asp.net mvc model binding」を参照してください。

ビューステート冗談の少しオフトピック例:

私はU413と呼ばれるかなり大きなコミュニティサイトを持っています。私は最近、ASP.net MVC 2.0を使用するように再設計しました。プログラマーのためのコミュニティーであり、私はいつもウェブフォームを使用するために私を怒らせます。さて、私はそれらに少し冗談を再生することを決めたwebformsを使用しないでください。 MVCはviewstateを使用しませんが、私はwebformに入り、いくつかのデータを含むviewstateを生成し、手動で隠しフィールドをMVCアプリケーションのビューに貼り付けました。

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjkPFgIeE1U0MTNTZWNyZXRBY2Nlc3NLZXkFM2h0dHA6Ly93d3cudTQxMy5jb20vQ29udGVudC9VNDEzU2VjcmV0QWNjZXNzS2V5LmpwZ2RkpshYUvbSiUuE0YaYNBH0rvTGj4qEcquSqQeUs9ZpuIQ=" /> 

すでに何人かの人々は、ほとんどの秘密やエクスプロイトを見つけることを期待してHTMLソースを通じてスヌーピング行って、これが発生しています。彼らはすぐにそれをデコードし、良い笑いを得ました。表示したい場合は、値をコピーして先にリンクしたデコーダに貼り付けてください。

関連する問題