2011-07-05 11 views
1

私のasp.netプロジェクトにはマスターページがあり、Contentplaceholder1のコントロールがあります。自分のローカルで "ctl00_Contentplaceholder1_control"のようにレンダリングした後、このコントロールのIDを変更します。しかし、 "Contentplaceholder1_control"のように変化するサーバーで。私がdocuments.getelelentbyid('ctl00_Contentplaceholder1_control') js機能を使用したとき、私のローカルでは動作しますが、サーバでは動作しません。では、なぜアプリケーションがサーバー上で実行されるときに「ctl00_」が消えてしまうのでしょうか?レンダリング後のマスターページのコントロールID

編集:

レンダリングされた後に、サーバー側のコントロールIDは "ctl00_" が含まれていないのはなぜ

答えて

2

サーバー側のプロパティClientIDを使用して適切なIDを取得するか、.NET 4を使用している場合はClientIDModeを使用します。

1

静的IDを作成するのにClientIDModeを使用しないのはなぜですか?どのバージョンの.NET Frameworkを使用していますか?

(旧バージョン用)の別のオプションは、その後、静的なidを持つdivの中にあなたの.NETコントロールをラップのようにjQueryを使用することです:

var wrapper = $('#wrapperDivId'); 
var control = wrapper.find('typeOfControl')[0]; 

この方法で、あなたのコントロールのidのレンダリング方法の関係なく、あなたはいつでもそれにアクセスすることができます。

たとえば、TextBoxesは<input type='text' />にレンダリングされます。今、あなたはこのようなdivの内側にテキストボックスをラップすることができます:

$('#wrapper input') 
+0

私は.NET Framework 3.5を使用しています。私はまだそれを試していない、私はそれを試してみましょう。しかし、私はこのコントロールは、ユーザーコントロールにあるiframeであり、ポップアップのようなそのオープンだと言う必要があります。 ClientIDModeを使用できますか? – cerebrum

+0

いいえ、ClientIDModeは.NET 4の新機能です。バージョン3.5ではありません。私はコントロールをラップすることをお勧めします。 :) –

+0

+1この素晴らしいアプローチの@Saeed :) –

0
document.getElementById("<%= control.ClientID %>"); 

:今

<div id='wrapper'> 
     <asp:TextBox ID='firstName' runat='server' /> 
</div> 

、クライアントIDの関係なく、あなたが使用してクライアント側で、あなたのテキストボックスを取得することができますクライアントIDをハードコードするよりはるかに安全で優れたアプローチです。

+0

コントロールは、ユーザーコントロールにあるiframeです。ユーザーコントロールがポップアップのように開きます。そして、私はこのポップアップで何かを選択すると、ページ上の変化する一見を得る。そして、私が "<%= control.ClientID%>"を使用すると、別のバグがあります。それは、あなたが間違って変更することはできないと言います... – cerebrum

+0

あなたはコントロールのサーバー側のIDであなたの 'コントロール'を置き換える必要があります。さらに進めるには、構造をよりよく理解するために、より多くのコードを提供する必要があります。 –

+0

レンダリング後にサーバーサイドの制御IDに "ctl00_"が含まれていないのはなぜですか? – cerebrum

1

あなたは

documents.getElelentbyid('<%=ControlID.ClientID %>') 

...のような
0

Answer is hereを行う必要があります。

私のホスティングサーバーは、asp.netサーバーをasp.net 4サーバーに変更しました。だから私のコントロールは "ctl00_"なしでレンダリングされました。私は.net 3.5プロジェクトを.net 4とI changed web.config file like thisにコンパイルしました。

現在は動作しています。

関連する問題