1

私はいくつかのaspxを学んでいて、質問がありました. 次のコード例があります。

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

ここで理解できないのは、フォームが既にサーバーで実行されている場合、なぜ <% %> コード ブロックが再び必要なのかということです。コードブロックとページ上のサーバーで実行されている全体の違いを理解していない可能性があります。ここで何が起こっているのかについて、私の誤解を解いてくれる人はいますか? aspxページのサーバー側とクライアント側の用語がよくわかりません。

次のようなコードも見ました。

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

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

<% If dataExists(whatever) Then %>
HelloWorld

上記のコードブロックを削除できなかったのはなぜですか? サーバータグでは、コードはすでにサーバー側で実行されており、いくつかの書き込み要求を行っています。次に、ロジックチェックを行って再度書き込むコードブロックがあります。なぜこれらを分けるのですか?それらは同じ機能ではありませんか、それとも何か不足していますか?

4

6 に答える 6

2

最初から明確にしましょう。このファイル拡張子について調べようとしているのでない限り、aspxを学習しているのではなく、ASP.Netおよびより具体的なASP.NetWebフォームを学習していることになります。

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

このマークアップには、純粋なhtml、サーバーコントロール(<asp:Label />など)、コードブロック、DataBinding式、リソース式などを含めることができます

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

おそらくあなたはこの例を見たことがありますが、これはある種のシンタックスシュガーであることがわかります。

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

vs

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

同じものを生成しますが、2つの異なる方法で記述されます。その構文は解析されるだけです。

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

于 2012-04-11T15:01:11.330 に答える
0

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

于 2012-04-11T14:40:40.817 に答える
0

html 要素に追加runat="server"すると、サーバー側のオブジェクトに変わります。つまり、Designer ファイルでHtmlFormインスタンスが作成されます。コントロール ツリーに追加される他のサーバー側コントロールがない限り、タグ内にあるものは含まれません。<% =GetTime()%>たとえば、.Net が注意を払うために何か他のものを配置するまで、タグ内ではプレーンな Html の記述に戻ります。

于 2012-04-11T14:40:48.690 に答える
0

簡単に言えば、ブラウザーがサーバーからページを要求すると、ASP.NET が実行可能コード、つまり<% ... %>ブロック内のコードを処理し、その結果がブラウザーに返されます。

別の見方をすると、サーバー側で実行したいコードは<% ... %>すべてブロック内にある必要があり、それ以外はすべてクライアント側です。

于 2012-04-11T14:45:10.843 に答える
0

コード ブロックは、処理エンジンがページのどの部分を実行するかを認識できるようにするだけです (そうしないと、ページのどの部分がコードで、どれが単なるマークアップであるかを判断するのが非常に難しくなります)。

于 2012-04-11T14:40:50.873 に答える
0

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

あなたが書いた場合

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

次に、テキストを逐語的に取得します。パーサーが HTML の特定のセクションの C# コードに切り替えることを理解するのは、コード ブロックを追加する場合のみです。

すでに良い答えを書き直すのではなく、runatサーバーの目的に関するSOの質問は次のとおりです。

于 2012-04-11T14:41:04.883 に答える