runat="server"
コントロールが必要であり、サーバー側からコントロールに値を割り当てるため、同じです。
主な違いは、code_behind ファイルまたはマークアップ ファイルで値を割り当てることです。お好きな場所で。どちらの場合も、サーバー側でその値を収集する必要があります。
サーバータグはページのレンダリングフェーズで処理されるため、コードファイルに値を割り当てるためにサーバータグを使用するコストは変わらないと思います。
msdn から抽出:
ASP.NET Web ページにコードを追加するための既定のモデルは、コード ビハインド クラス ファイル (コード ビハインド ページ) を作成するか、属性 runat="server" (a単一ファイル ページ)。通常、作成するコードは、ページ上のコントロールと対話します。たとえば、コントロールの Text (またはその他の) プロパティを設定することにより、コードからページに情報を表示できます。もう 1 つの可能性は、埋め込みコード ブロックを使用してコードをページに直接埋め込むことです。埋め込みコード ブロック 埋め込みコード ブロックは、ページのレンダリング フェーズ中に実行されるサーバー コードです。ブロック内のコードは、プログラミング ステートメントを実行し、現在のページ クラスの関数を呼び出すことができます。
埋め込みコード ブロックの用途 埋め込みコード ブロックは、主に古い ASP テクノロジとの下位互換性を維持するために、ASP.NET Web ページでサポートされています。一般に、複雑なプログラミング ロジックに埋め込みコード ブロックを使用することは、ベスト プラクティスではありません。コードがページ上でマークアップと混在している場合、デバッグと保守が困難になる可能性があるためです。さらに、コードはページのレンダリング フェーズ中にのみ実行されるため、ページ処理の適切な段階にコードを適用する際のコード ビハインドまたはスクリプト ブロック コードよりも柔軟性が大幅に低下します。埋め込みコード ブロックの用途には次のようなものがあります。 前の例に示すように、コントロールまたはマークアップ要素の値を関数によって返される値に設定します。計算をマークアップまたはコントロール プロパティに直接埋め込む。