2009-07-25 8 views
2

私は既存のアプリケーションをDotNetNukeモジュールに移植し、奇妙な動作を発見しました。コードがHTML要素を識別できるように、私はJavaScriptを作成するときにClientIDを使用します。それは、このような値は何かを作成通常:コードをDotNetNukeモジュールに移動した後にClientIDが無効になる

"g_ctl00_ctl01_ctl00_ctl00_txtSearch" 

を私たちは、すべての権利、この万回を見てきましたか?まあ、DotNetNukeのモジュールにこのコードを移植すると、最初の時間のためにそれを実行した後、ClientIDプロパティはこれを返している:

"dnn_ctr397_GalleryServerPro.Web.Gallery, TechInfoSystems_ctl00_ctl01_ctl00_ctl00_txtSearch" 

お知らせカンマとスペース。これは、あらゆる種類のJavaScriptエラーを引き起こしています。たとえば、ASP.NETログインコントロールは現在無効JavaScriptを出力している:私のモジュールはTechInfoSystems.GalleryServerPro.dllのアセンブリ名を持つ

var dnn_ctr397_GalleryServerPro.Web.Gallery, TechInfoSystems_ctl00_ctl01_ctl01_lv_ctl02_Login1_UserNameRequired = document.all ? document.all["dnn_ctr397_GalleryServerPro.Web.Gallery, TechInfoSystems_ctl00_ctl01_ctl01_lv_ctl02_Login1_UserNameRequired"] : document.getElementById("dnn_ctr397_GalleryServerPro.Web.Gallery, TechInfoSystems_ctl00_ctl01_ctl01_lv_ctl02_Login1_UserNameRequired"); 

、デフォルトの名前空間はGalleryServerPro.Webで、ユーザーコントロールがにありますいくつかの余分なテキストがどこから来ているのかを部分的に説明するので、なぜがそこにあるのですか?クライアントIDがコンマ、スペース、またはjavascriptで問題を引き起こす可能性のある他の文字を出力しないようにするにはどうすればよいですか?

おかげで、 ロジャー

答えて

1

私は(一種の)それを考え出した。 DotNetNukeページに追加されているユーザーコントロールにIDを追加する必要がありました。これは、PortalModuleBaseを継承するメインビューのユーザーコントロールです。ユーザーコントロールは完全にコードビハインドクラス(no .ascx)に含まれているため、これをInitイベントに追加するとすべてが修正されます。

this.ID = "gsp";

私の理論がこれらに該当する場合に問題が起こるということです。

  1. 「ビュー」ユーザーコントロールは、コードビハインドファイル(なした.ascxファイル)

  2. ユーザーコントロールを使用していますIDが指定されていません。

.ascxなしでモジュールを登録するときは、モジュール定義でクラスとアセンブリを指定する必要があります。私の場合、それは "GalleryServerPro.Web.Gallery、TechInfoSystems.GalleryServerPro"です。テキストに非常に近いように見えるDNNは、クライアントID文字列に挿入されます。 DNN(またはASP.NET)は、その文字列を取得して、それを使用して、ユーザーコントロールにIDが割り当てられていない場合にclientIDを構築する必要があります。

これがDNNのバグかどうかはわかりませんが、わかりましたが、今すぐ移動できます...

-1

私はこれが起こっている(が、その後、私はDNNを使ったことがない)理由はわかりません

あなたは何ができるか、影響を受けたservercontrolsためのClientIDの制御を自分で取るですたとえば、サーバーID = txtSearchのTextBoxコントロールを使用しているようですが、TextBoxから継承したクラスを作成し、そのClientIDをサーバーIDと等しくする(txtSearchというコントロールが1つしかないと仮定して) ) here

それはDNNがそれをオーバーライドするかもしれないかもしれないが、それはショットの価値があるかもしれないかもしれないかもしれない

+0

私は最初に(ClientIDを生成するときに使用される)UniqueIDをオーバーライドしようとしましたが、クリックイベントが発火しなくなったなどのその他の問題が発生しました。最後に答えは、ユーザーコントロールにIDを割り当てることでした。 – user98773

0

代わりにクラスを使用してコントロールを参照しようとすることができますか? そのようなことをするためにそこには多くの良い機能があります。私は、すべてのものjavascriptをより簡単にするために、jqueryを最初にお勧めします。