asp.net 4.0 Webフォーム - どのように簡単な方法でクライアントIDの外のContentPlaceHolder1_を保つために?

StackOverflow https://stackoverflow.com/questions/2828719

  •  26-09-2019
  •  | 
  •  

質問

私は過去にマングリングためのクライアントIDを、それらを使用して回避の既存のWebフォームサイトにマスターページを導入しようとしてる(と私はマングリングに対処したいと<%foo.ClientID%>どこでもやっていない:)

GOAL:結合データの使用のを除いて「静的」ID値(サーバーコントロールのid属性にあるもの)の/それらのケースのために壊すの制御を繰り返すので、区別するためにサフィックスまたは何でも必要(基本的に、予測可能)

これでサイトがASP.NET 4.0に移行することを、私が最初に(web.configファイルで)静的の使用のClientIDModeしようとしましたが、彼らはすべての結果以来、繰り返し制御(例えばgridviews内部のチェックボックスを)やってあまりにも多くの場所を破ったこと同じIDを持つます。

だから、私はその後、繰り返しコントロールは、IDの競合しなかったであろうそのことを(ちょうどweb.configファイルで、再び)予測可能試みたが、それがうまく機能し、のを除いてのそのマスターページのコンテンツプレースホルダ(これは実際に命名容器である)が依然として得クライアントIDの(例えば、ContentPlaceHolder1_someCheckbox)に反映されている。

確かに私はstaticとしてweb.configファイルの設定のままにして、すべてのデータバインドされて行くことができます/繰り返しコントロールが予測可能にそれらを切り替えて、私は、散乱のClientIDModeの属性になくても、その効果を得るためにいくつかのより簡単/簡単な方法があります願っています場所のそれらのNの数の(あるいは自分だけのセットがClientIDModeにすることをユーザーコントロール、または任意で、これらすべてのデータバインドされたコントロールを拡張し)ます。

OfType<INamingContainer>()と歩行コントロールを行くだろうと(それが仕事やないかどうPREINIT?ないように注意してください)私もマスターまたはBasePageクラスハンドラを静的にweb.configファイルセットを残してやって考える(上のより良い選択かもしれませんタイプは、それがリピーターとGridViewのを見て選択を開始する良いように思える)と私はコントロールを繰り返すの外のすべての私の「正常な」もののために静的を取得しますが、のような静的な内部物事に対処する必要がないと思いますので、その後、予測可能にそれらを設定しますGridViewの/リピータの/ etcます。

私は、それ子IDの中に含まれているの「optsのうち」というコンテンツプレースホルダをマークする方法が表示されない - それは必要な属性だと空にするためのプレースホルダのIDを設定/ブランクが仕事をしませんが:)

私は、私が行方不明とに依頼することを決めたことが、より良い/簡単な方法があった考え出しその時点でSO:)

編集:私はfetch_by_idする$(「#fooの」)からのすべての私の「idでフェッチ」jqueryのコール(「foo」を)変更すると、関数は$( '#をチェックして「正しいもの」を返すことを持っていることについて考えましたFOO「)。長さは、その後、$(」#のContentPlaceHolder1_foo「)。長さ(そしておそらく他のパターン)、あるいは単にそれが返す持って$(」#fooという、#ContentPlaceHolder1_foo ')(再び、潜在的には他のパターン)が、すべての変更の場所私はIDによる要素はかなり醜いあまりにも見えたフェッチし、そう簡単に行うことが可能ならば、私はその抽象化レイヤを避けたいのですが:)

EDIT2:WRT $ IDのjQueryのセレクタを使用して= 'FOO'

私の心配は、このようなことをやっては、(それがよりリアルよりも想像することができるが)IDの別のページの終了中のとき1です。ページは、IDの後、「FOO」と「barfoo」のid $の持つ要素を持っている場合たとえば、=「fooが」偶然「barfoo」なども含まれます。確かにそこ(要素型と接尾辞を付けるように、fooCheckboxとbarfooButtonそうか、何でも)ことを防止する方法がたくさんあるが、私は、既存のソースをスキャンし、および/または命名のための新しいルールを施行する必要がありますする必要はありませんでした。

サーバーコントロールされていないすべてのコントロールの以来、私はできません$ =「_ fooが」通常のdivのid以降=「fooが」見つかりませんどちらか(と私はむしろちょうどにrunat =「server」を避けるだろう)

:名前をマングルします

私は要素ごとに固有のCSSクラス名を作り、「本当の」CSSを行う場合(クラスが明らかに台無しにされませんので)代わりにその上で選択するが、それはそうと、確かmuddiesの物事を行うことは非常にハックだたと考えられ、他の事仕事:)

役に立ちましたか?

解決

//api.jquery:

私は正直、私は<のhref = "HTTPを使用し、それを行うための簡単な方法がある場合は知っているが、あなたは、私が過去にやっていることはjQueryを使用している考慮することではありません。 COM /属性エンド・セレクタと、セレクタ方法を有する/」REL = "nofollowをnoreferrer">属性を終了する。

.NETはそれの終わりにあなたの「静的」idはIDを生成しています追加しているので、あなたはjqueryのセレクタ$("input[id$='yourstaticid']")とすることを得ることができます。

私は、これはあなたが探していることを知っているソリューションではありませんが、それはあなたの「fetch_by_id」より簡単になります。

ホープは役立ちますか、少なくともあなたのアイデアを提供します。

他のヒント

ClientIDMode = UI.ClientIDMode.Static

あなたは「コンストラクタ」でこれを設定する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top