2012-07-16 11 views
38

私はASP.NETが本当に新しいです。私はデフォルトのASP.NET Webアプリケーションをチェックアウトしていました。デフォルトでは、いくつかのページ(Default.aspx、About.aspxなど)があります。runatサーバーの属性を理解する

Site.masterファイルが私のページのメインレイアウトを作成するファイルであることに気付きました。 しかし、headタグにはrunat="server"という属性があることにも気付きました。

このタグは<asp:XXX>タグで使用されていますが、なぜ<head>タグで使用されているのですか?

また、その属性を削除すると、すべてのスタイルがウェブページから削除されます。だから、それは明らかに何かをしている。私はちょうどその正確に何をしているのか分かりません...

なぜ、HTMLタグには... ???私はrunat属性は基本的に、それはパースに要素を必要としていることをASP.Netを伝え、その属性と、それはなどのコンテンツです...

<head runat="server"> 
    <title>Hallo</title> 
    <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" /> 

    <!-- This part is run on the server. So why does the head tag 
     also need a runat=server ?? --> 
    <asp:ContentPlaceHolder ID="HeadContent" runat="server"> 
    </asp:ContentPlaceHolder> 
</head> 
+9

MVCの使用を開始します。特に開始したばかりのMVCを使用してください。 – vcsjones

+2

これについては、すでにいくつかの質問があります。http://stackoverflow.com/q/1375725/422353、http://stackoverflow.com/q/304290/422353 – madth3

+1

@vcsjones私の証明書のMS 70から515の本。だから、現在私はちょうどASP.NET :-( – Vivendi

答えて

20

head要素にはrunat="server"属性が含まれています。これは、静的HTMLではなくサーバーコントロールであることを示します。すべてのASP.NETページはSystem.Web.UI名前空間にあるPageクラスから派生しています。このクラスには、ページの領域へのアクセスを提供するHeaderプロパティが含まれています。 Headerプロパティを使用して、ASP.NETページのタイトルを設定するか、レンダリングセクションにマークアップを追加できます。ページのPage_Loadイベントハンドラに少しのコードを書くことで、コンテンツページの要素をカスタマイズすることは可能です。

' Programmatically add a <meta> element to the Header 

Dim keywords As New HtmlMeta() 
keywords.Name = "keywords" 
keywords.Content = "master page,asp.net,tutorial" 
Page.Header.Controls.Add(keywords) 

詳細はSpecifying Meta Tags in ASP.NET with VB.NETを参照してください。

+0

非常に混乱している説明.... –

8

をサーバー上で実行する必要がありますそこに任意のコードが表示されませんサーバーコントロール。応答を構成するために、サーバー上でコードを使用可能にする。

これがなければ、<head>セクションに含まれる子コントロールは解析されません。したがって、動的であれば、タイトル操作やその他のサーバーコントロールは解釈されません。

5

ASP.NETのrunat = "server"タグを使用すると、ほとんどのHTML要素を生成時にコード経由で操作できるサーバー側のコントロールとして変換/処理することができます。いくつかのコントロールには明示的な実装があり、他のコントロールは汎用コントロールの実装に戻すだけです。

+0

非常に良い説明、他は非常に混乱しています –

27

<head>要素からrunat="server"を削除すると、スタイルがもう適用されない理由が尋ねられました。

これは簡単です。サーバー側で実行すると、パーサーはスタイルシート宣言<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />~/をアプリケーションのルートパスに置き換えます。

~は、URLで不正です。したがって、これがパーサーに置き換えられない場合、ファイルは見つからないので、スタイルシートは適用されません。 <link>要素は、サーバー上で実行されている理由

ああ、ところで、<head>要素にrunat="server"属性を設定するため、サーバー上で実行されるように、そのすべてのサブ要素を強制します。

関連する問題