2012-06-20 12 views
7

私はASP.NET 4.0 Webフォームを使用しています。私は他のマスターページから継承したマスターページも使用しています。私はパネル内にコントロールを持っています。基本的にはマルチレベルのコンテナがあります。これは、要素が巨大なIDを持つ原因になります。 IDの長さは約300バイトです。ASP.NETサーバーコントロールを作成する方法最短のIDを取得しますか?

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

各サーバーの制御を可能にする最短のIDを持つ最良の方法は何ですか?各要素をそのコンテナ(ClientIDMode="static"以外)に依存しないようにする方法はありますか?最後に、ASP.NET MVCはこの問題を緩和しますか?

答えて

1

私はClientIDMode=staticが1つの方法だと思います。あなたはweb.confでもこれを設定できます。そして、Asp.Net mvcでは、html(特にRazor)上でフルコントロールを利用できます。そのようなウェブフォームのような考えはありません。 idsをhtmlタグに割り当てることができます。 Infact Asp.Net mvcは他のすべてのフレームワークに対する答えです。

3

私はそれが短いIDを作成するかどうかを確認するために、どちらか予測可能または静的changing the ClientIdModeをお勧めします。

これに加えて、CodeProject articleが必要なものを実現するように見えます。

1

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

はい。

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

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

あなたはMVCのClientIDを完全に制御できます。

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

私はそれを自分で変更しない限り、上記のマークアップは、常にmyIDのIDを持っています。

2

同様に、HTMLコードのサーバー側レンダリングがないため、MVCは絶対にこの問題を緩和します。あなたのHTMLのすべてがあなたのビューに直接あるので、あなたはすべてのアイテムを完全に制御できます。衝突する入力のリスク(数百の入力を持つページの場合)も実行します。

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

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

関連する問題