ASP.NET 4のClientIDModeの正しい設定は何ですか。ASP.NET2.0レンダリングを取得します。
-
26-09-2019 - |
質問
ASP.NET 2.0からASP.NET 4.0にアプリケーションを更新しました。
web.configに含まれています <system.web>
エレメント:
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" />
私の理解では、これはコントロールを.NET 2.0/3.5がするのと同じにすることになっているということです。
しかし...そうではありません...これが一例です
これは2.0でレンダリングされます:
<input id="grdUserEntity__ctl1_chkSelectAll" type="checkbox"
name="grdUserEntity:_ctl1:chkSelectAll" onclick="javascript:iSelectAll();" />
これは4.0です:
<input id="grdUserEntity_ctl01_chkSelectAll" type="checkbox"
name="grdUserEntity$ctl01$chkSelectAll" onclick="javascript:iSelectAll();" />
違い:
2.0 id=grdUserEntity__ctl1_chkSelectAll
4.0 id=grdUserEntity_ctl01_chkSelectAll
私が読んだことに応じて、その構成設定により、ASP.NET 4.0がサーバーコントロールとクライアントIDを以前のバージョンと同じようにレンダリングします。
私たちは何が間違っているのですか?
解決
ASP.NET 2.0からASP.NET 3.5にIDがどのようにレンダリングされたかに変更がありました。あなたは2.0から4.0に行くので、あなたはまだその違いを見ています。この変更は、XHTMLコンプライアンスの改善によるものでした。
XHTMLComplianceコンパート設定で2.0レンダリングに戻りてみてください。さらに別のcompat設定、はい:)それは機能するはずですが、正直なところ、古いcompat設定が4.0であることがどれだけよくテストされているかはわかりません。それ。
2.0レンダリングを維持したい理由はありますか?回帰を恐れているだけですか、それとも実際の回帰を知っていますか?
XHTML設定: http://msdn.microsoft.com/en-us/library/ms178159.aspx
他のヒント
この投稿の将来の読者の場合、互換性の問題を緩和することができます。 <%=objectid.ClientId %>
ASP.NETページに構築します。
例:TXTINPUTと呼ばれるテキストボックス(ASP.NETがID = CTL00_CPHMAINCONTENT_TXTINPUTとしてレンダリングする)と仮定します。次のJavaScriptコードでASP.NETページでそのオブジェクトを参照できます。
str txtInputObjNm = "<%=txtInput.ClientId %>";
実行時に、次のクライアント側JavaScriptに自動的に変換されます。
str txtInputObjNm = "ctl00_cphMainContent_txtInput";
.NETがclientIDの割り当て方法を変更するように「決定」した場合でも、コードは機能します。
4.0アプリケーションで pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"
スタイリングを完全に台無しにします Site.master
ページ。たとえば、メニューはデザイナーではほとんど見えず、ブラウザでスタイリングを完全に失います。基本的に、デザイナーではスタイリングが失われます。
ターゲットフレームワークを4.0から3.5に設定し、4.0に戻ることでこれを見つけました。この後、スタイリングは複雑になりました。すべてのファイルを良いアプリと比較した後、私はついにこの行を見つけました web.config
. 。私はそれを削除し、私のスタイリングの問題は消えました。