2011-11-08 14 views
1

サイトをフレームワーク3.5から4.0にアップグレードしようとしています。すべてが細かいサーバー側であるように見えます。私の唯一の問題はこれまでのカスタムコントロールのIDです。ASP.Net 3.5クライアントIDが4.0と異なる

コントロール減速が次のようになります。

<div runat="server" id="gglSelectedItemsImage" class="gplSelectedItemsText">None selected</div> 

3.5でレンダリングするとコントロールは次のようになります。

<div id="gplCategories_gglSelectedItemsImage" class="gplSelectedItemsText">Some Content</div> 

など4.0に:

<div id="ctl00_ctl00_ctl00_ContentPlaceHolder1_Content_gplCategories_gglSelectedItemsImage" class="gplSelectedItemsText">Some Content</div> 

これは、いくつかの原因となっています私たちの古いJavaScript/JQueryは失敗します。

web.configに<pages clientIDMode="AutoID" controlRenderingCompatibilityVersion="3.5" />を設定しているため、99.9%のIDが正しいです。最も奇妙なことは3.5コントロールは、標準の3.5自動IDではなくclientIDMode="Predictable"でレンダリングされているように見えますか?私がアクセスした場合、コントロールは4.0でサーバー側のCLIENTID

は、さらにそれが正しい表示されます:

Me.gglSelectedItemsImage.ClientID = "gplCategories_gglSelectedItemsImage" 

これが主な問題である、電気ショック療法はJavaScriptに挿入された任意の値は、実際に間違った値です。

私たちのサイトは残念ながらこのエラーを修正するだけで大​​丈夫なので、コントロールがIDを別の方法でレンダリングしてサイト全体に実装する理由を理解する必要があります。

皆さん、ありがとうございます。

+3

ご高齢のJavaScript/jQueryのは、とにかくハードコードされたクライアントIDに依存しているのはなぜ? – LukeH

+0

私はLukeHに同意します。 ClientIDプロパティは存在するため、フレームワークのバージョンに関係なく、自分でハンドクラフトする必要はありません。 –

+0

私の時間の前にあったので、私は知らない。この例では、別のコントロール( "gglSelectedItemsImage")のclientIDを除いたジェネリックコントロールがあり、その値を更新するためにJqueryを使用しています。実際にレンダリングされたドキュメントが "ctl00_ctl00_ctl00_ContentPlaceHolder1_Content_gplCategory_gglSelectedItemsImage" class = "gplSelectedItemsText"の場合、ClientIDが "gplCategories_gglSelectedItemsImage"であるとServerが原因で問題が発生しました。 – pingoo

答えて

0

あなたの.aspxファイル内でこのようなクライアントのidをアクセスする必要があります。

<%=gglSelectedItemsImage.ClientID%> 
+0

これは、サーバーClientIDが実際のコントロールと同じではないという問題です。 – pingoo

+0

それは非常に奇妙に聞こえる。それはサイトが自走していると思っているように思えるが、ページは内部的に予測可能な形で動いている。試して、クライアントIDをSaveStateCompleteイベントを通じてjavascriptに注入することができます。その時点でクライアントIDが間違っているかどうかはわかりません。 – Graymatter

+0

'js'ファイルでアクセスするのはどうですか?あなたのコードブロックは動作しません...あなたの答えは失敗します(4.0ではあなたのclientidmodeを静的に設定できますが、3.5ではそれが全BSです) – HellBaby

1

あなたは理由を説明するマスターページを使用している2番目の例では、この

<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/> 
+0

Fahadに感謝します。しかし、私はすでにcontrolRenderingCompatibilityVersion = " 3.5 "(私の質問にそれを含めて更新します) – pingoo

+0

複数のweb.configファイルがありますか? – Fahad

+0

現在のビルド構成(デバッグ/ライブなど)が深まっていますが、それだけです。それを見て、通常のタグをオーバーライドするものは何もありませんでしたが、私は試しましたが、それは助けになりませんでした(ちょっと喜んで - 大顔の瞬間だったでしょう)。 – pingoo

1

をお試しくださいClientIDは異なります。あなたがコントロールを参照している場合はClientIDによってのに違いを作るべきではありません。

var ctrl = $("#<%=gglSelectedItemsImage.ClientID%>"); 
+0

どちらの例も同じウェブサイトからのもので、3.5のものは4.0のものに準拠しています。だから、マスターページの影響は、どちらも私が前提にする必要がありますか? – pingoo

関連する問題