2012-04-11 19 views
1

私はいくつかのaspxを学んでいて、質問がありました。aspxコードブロック対runatサーバ

<%@ Page Language="C#" %> 
<html> 
<body> 
    <form id="form1" runat="server"> 
     Current server time is <% =GetTime()%>. 
    </form> 
</body> 
</html> 

今私がここで理解しないどのような形がすでにサーバで実行されている場合、なぜ我々は再び<%の%>コード・ブロックが必要なのかということです:私は、次のコード例がありますか?おそらく、コードブロックとページ上のサーバーで実行されているコードブロックの区別を理解していないかもしれません。誰でもここで起こっていることについての私の誤解をクリアしてもらえますか?私はaspxページのserversideとclientsideの用語を理解していません。

私はまた、このようなコード見てきました:コードブロックは、上記排除することがcouldntはなぜ今

<script language="VB" runat="server"> 
Dim .... 

Public Sub PageLoad() 
... 
Response.Write("Hello") 
End Sub 
</script> 

<% If dataExists(whatever) Then %> 
HelloWorld 

を?私はサーバーのタグで、そのコードはすでにサーバー側を実行しているといくつかの書き込み要求をしていることを意味します。次に、再度書き込むために何らかのロジックチェックを行っているコードブロックがあります。なぜこれらを分離するのですか?それらに同じ機能性を与えたり、何かが欠けていますか?

答えて

2

最初から明確にしましょう。あなたはASPネットを学び、ASP .NET Webフォームより具体的だ、このファイルの拡張子について調べるしようとしている場合を除きあなたは、のaspxを学習されていません。

Webフォーム(aspxファイルのコード)からのマークアップがASP .Netによって解析された後、実際にHTMLを作成するために後で使用されるクラスが生成されます。

このマークアップには、純粋なhtml、サーバーコントロール(<asp:Label />など)、コードブロック、データバインディング式、リソース式、およびmany moreを含めることができます。

これらはすべて、生成されたクラスを取得するために解析されます。生成されたクラスには、ライターがいくつかの文字列(必要に応じてHTML)を書くための多かれ少なかれの指示が含まれます。

あなたはおそらくthis exampleを見てきましたが、これは何らかの構文糖であることがわかりました。

<%= DateTime.Now.ToString() %> 

<% { Response.Write(DateTime.Now.ToString()); }%> 

それは同じことを生成するが、2つの異なる方法で書かれています。その構文はちょうど解析されます。

サーバーコードとクライアントコードの違いは1つだけです。サーバーコードはサーバー上で実行され、クライアントコードはクライアント上で実行されます。そのクライアントコードはサーバによって生成される(または生成される)ので、クライアント側でそれを実行することができます。

0

<% ... %>ブロックはフレームワークコード(この例ではC#)を表し、残りのドキュメントは純粋なHTMLです。
ブロックは、コードと単純なマークアップを区別するために使用されます。

0

runat="server"をhtml要素に追加すると、サーバー側オブジェクトに変換されます。つまり、DesignerファイルでHtmlFormインスタンスが作成されます。タグ内にあるものは、コントロールツリーに追加される他のサーバーサイドコントロールがない限り、含まれません。タグの内部では、.Netに注目するために何か他のものを置くまで、普通のHTMLを書くことに戻ります。例えば、<% =GetTime()%>です。

0

コードブロックでは、処理エンジンがページのどの部分を実行するかを知ることができます(ページのどの部分がコードであったのか、単純にマークアップであったのか分かりにくいことはありません)。

0

コードブロックは、C#コードから厳密なHTMLを区切る方法です。あなたは

<form id="form1" runat="server"> 
    Current server time is GetTime(). 
</form> 

を書いたなら、あなたはテキストを逐語的になるだろう

。パーサーが理解しているコードブロックを追加して、HTMLの特定のセクションのC#コードに切り替えるだけです。

のではなく、すでに良い答え再書き込み

:一言で言えば Here is the SO question as to what the runat server is for

0

は、ブラウザがサーバーからページを要求し、ASP.NETは、<% ... %>ブロック内の任意のコードすなわち任意の実行可能コードの結果を処理しますそれはブラウザに送り返されます。

これを見るもう1つの方法は、サーバー側を実行するコードです。<% ... %>ブロック内にある必要があります。他のすべてはクライアント側です。

関連する問題