2012-01-19 11 views
0

Sharepointページのすべての要素のクライアントIDが時々変更されます。

誰が、なぜ、それが変化するインスタンス上を教えてくださいでき???共有ポイントの要素のクライアントIDが変更されましたか?どうして?いつ?

+1

この[質問] [1]をチェックすると、いくつかのアイデアが表示されます。 [1]:http:// stackoverflow。com/questions/1325687/sharepoint-textfield-clientid-changes – Shoban

+0

私は自分の経験から、ClientIDが完全に動的であると仮定することが常に最良であることを発見しました。実際に私の経験でするのは難しいことではありません。 ClientIDをハードコーディングせずに問題を解決するのを手伝いたいのであれば、私はそれを手伝ってうれしいです。 – Servy

答えて

2

jQueryのは素晴らしいです!これにより、クライアント側の開発がより迅速になります。 無数のプラグインは、ほぼあらゆるニーズに対応しています。 Asp.NETのウェブフォームで のjQueryを使用すると、 ネストされたサーバーコントロールを扱うときに悪化取得します。 ASP.NET マスターページを使用するとClientIDが追加されます。 JavaScriptのオブジェクトは次のようになります。 ctl00_m_g_aaf13d41_fc78_40be_81d5_2f40e534844f_txtName 上記の問題は、txtName要素を取得するには完全な「パス」を知る必要があることです。これは、以下の方法で使用してオブジェクトを取得するために参照するためにかなり 悪化です: のdocument.getElementById(「ctl00_m_g_aaf13d41_fc78_40be_81d5_2f40e534844f_txtNameを」); これは、一般的なASP.NETアプリケーションまたはSharePointで使用されるサーバーコントロールまたはWebパーツを開発する場合に大きな問題になります。 の完全パスがわからない場合は、上のパスをハードコードすることはできません。

幸いなことに、この問題を回避するには、いくつかの方法があります。特に3つありますが、私は言及します。最初は標準のJavaScriptメソッドに相当jQueryの です: のdocument.getElementById( "<% = txtName.ClinetID%> ");"); これは、使用してjQueryの中で行うことができます。 $(" #」を< %= txtName.ClinetID%> ");"); 2番目のjQueryメソッドはサーバータグを必要としません。このメソッドはすべてのタグを検索し、指定されたテキストの末尾に の要素を探します。このメソッドのjQueryコードを以下に示します。 $( "[id $ = '_ txtName']"); もちろん、上記の両方の方法には欠点があります。最初は高速ですが、サーバータグが必要です。それは速いですが、ちょうど乱雑に見えます。 また、外部スクリプトファイルでは機能しません。 2番目の 代替はクリーンですが、速度が遅くなる可能性があります。私が以前に言ったように、 いくつかの他の選択肢がありますが、これらの2つは自分自身を見つけるものです 最も使います。

第三の背後にあるC#コードでJavascriptを登録します。

Page.ClientScript.RegisterStartupScript(GetType(), "saveScript", 

String.Format("function EnableSave(isDisabled)"+ 

"{{ var saveButton = document.getElementById(\"{0}\");"+ 

"saveButton.disabled=isDisabled;}}", btnSave.ClientID), true); 

、私はControls.Add(後の平均)コントロールがロードされた後にこのスクリプトを呼び出すことを忘れないでください。 CreateChildControlsメソッドで webpartsを開発しています。

0

ページのソースで$( '入力[タイトル= "名前"]')

ルックとtitleプロパティの値を取得します - たびに動作します。

0
ListBox1.Attributes.Add("onmouseup", 
    "document.getElementById('" + base.ClientID + "_" + lbnFilter.ClientID + "').style.display='block';"); 
関連する問題