2017-10-11 8 views
1

次の2つの最小限の例を考えてみましょう。<form>タグがASP.NETインラインコードの「可変スコープ境界」であるのはなぜですか?

例1:

<%@ Page Language="C#" %> 
<!DOCTYPE html> 
<html> 
<body> 
    <form id="form1" runat="server"> 
     <% string x = "Hello World"; %> 
     <%= x %> 
    </form> 
</body> 
</html> 

例2:

<%@ Page Language="C#" %> 
<!DOCTYPE html> 
<html> 
<body> 
    <% string x = "Hello World"; %> 
    <form id="form1" runat="server"> 
     <%= x %> 
    </form> 
</body> 
</html> 

例1つのコンパイルと予想されるように、実施例2もコンパイルしないで実行:

CS0103:名前 ' x 'は現在のコンテキストに存在しません。 (行<%= x %>

なぜですか?サーバー側のformタグはいくつかの魔法の "可変スコープ境界"ですか?はいの場合、これはどこに文書化されていますか?

答えて

0

おそらくrunat=serverタグを持つすべての要素は?以下のサンプルも実行されません。

<% string x = "Hello World"; %> 
<div id="TestDiv" runat="server"> 
    <%= x %> 
</div> 

おそらくpage life cycleのためです。 runx = serverのオブジェクト(の内容)をコードの背後で使用でき、そこでアクセス可能にする必要がある間に、aspxコードが最後にレンダリングされます。 xは、後でそのページでのみ宣言されるため、そこでは使用できません。

注:これは私の推測です。

0

あなたはASP.NETページ内(formタグ以外の)任意のタグにrunat="server"属性を使用する場合、あなたは基本的に解析サーバー側でタグ内の内容です。また、PAGEは異なるコンテキストを持つSystem.Web.UIクラスの下で定義されています。

Formタグは、単純な静的HTMLタグのコンテキストで定義されています。

<% string x = "Hello World"; %> 
<form id="form1" runat="server"> 
    <%= x %> 
</form> 
:あなたはこれをコンパイルすることはできません理由です

関連する問題