7

ASP.NET4.0WebFormsを使用しています。他のマスターページから継承したマスターページも使用しています。パネル内にコントロールがあります。基本的にマルチレベルのコンテナがあります。これにより、要素に巨大なIDが含まれるようになります。IDの長さは約300バイトです。

ページに数百の要素がある場合、これらのIDはページのサイズを劇的に増加させます。GridViewバインディングコントロールがあります。

各サーバーコントロールに可能な限り最短のIDを持たせるための最良の方法は何ですか?ClientIDMode="static"ページ内で一意であっても、各要素がそのコンテナ()IDに依存しないようにする方法はありますか?最後に、ASP.NET MVCはこの問題を軽減しますか?

4

4 に答える 4

3

ClientIdModePredictableまたはStaticに変更して、より短い ID が生成されるかどうかを確認することをお勧めします。

さらに、このCodeProject の記事は、必要なものを達成するように見えます。

于 2012-06-20T20:34:30.747 に答える
2

MVC はこの問題を完全に軽減します。これは、サーバー側で同じ方法で HTML コードをレンダリングすることがないためです。すべての HTML がビューに直接表示されるため、すべてのアイテムを完全に制御できます。また、衝突する入力のリスク (何百もの入力があるページの場合) も実行します。

WebForms で生成されるすべての html を短縮する方法の 1 つは、webusercontrol にするために絶対に必要ではないものをすべて削除することです。たとえば、ほとんどのラベルは静的です。runat="server"それらは通常、属性を含まない標準のテキストまたはアイテムに置き換えることができます。これにより、最初から ID が生成されなくなります。生成されるジャンクの量を減らすもう 1 つの方法は、ViewState からできるだけ多くのコントロールを削除することです。これにより、状態データをロードできなくなり、ViewState が短くなります。

ClientIDMode は継承可能なプロパティであるため、web.config (グローバル)、web.config (ローカル)、またはページ レベルで設定できます。お一人様でもご利用いただけます。あなたの質問はこれを具体的に排除しますが、すでに持っているものを書き換えることなく、最も柔軟性のある最良の選択肢になるでしょう。書き換えが問題にならない場合は、MVC を使用することをお勧めします。

于 2012-06-20T20:40:00.773 に答える
1

方法の1つにあると思いますClientIDMode=static。これは web.conf でも設定できます。また、Asp.Net mvc では、html を完全に制御できます (特に Razor では)。Webフォームのような考えはありません。html タグへの ID の割り当てを制御できます。実際、Asp.Net mvc は、他のすべてのフレームワークに対する答えです。

于 2012-06-20T20:32:01.387 に答える
1

最後に、ASP.NET MVC はこの問題を軽減しますか?

はい。

MVC にはありViewStateません。サーバー上でコントロールを実行していません。

読みにくい大量の HTML を生成するサーバー コントロールを使用していません。

ClientIDMVC のを完全に制御できます。

<a href="#" id="myID">Click</a>

上記のマークアップは、myID自分で変更しない限り、常に id になります。

于 2012-06-20T20:38:13.893 に答える