Asp.Netリカバリページ内のユーザーコントロール内のコントロールClientID
4678 ワード
よく知られているAsp.Netでユーザーコントロール(またはマスターページ)がページに追加されている場合、ユーザーコントロール内のコントロールのClientID番号がページ内のユーザーコントロールのClientIDに自動的に追加されます.
すなわち、ページ内のコントロール内のコントロールClientID=ユーザーコントロールid番号+""+ユーザーコントロール内のコントロールのid番号
あまりにも回りくどいことを言っているので,やはり次の例を見てみましょう.
aspでNetページindex.aspxにheadが追加されました.ascxユーザーコントロールid番号は「
head1
"
head.ascxコントロールにinput#hid_がありますnameコントロール
ではaspxが最終的に生成したinputのidは「head 1_hid_name」
"
MSはなぜこのように設計したのですか?
主にaspです.Netのすべてのコントロールには一意のid番号があります(
ClientID
)、ページが再送されると.Netはこのid番号で再送後の後続処理を行うことができます
一方、1つのページに複数のユーザーコントロールが含まれている場合は、1つのユーザーコントロールのid番号が一意である可能性がありますが、1つのページにマージすると重複するid番号が発生する可能性があります.
だからasp.Netは各ユーザコントロールのidの前にそのユーザコントロールのidを追加し、1ページに重複するid番号は表示されません(1ページに重複するid番号がコンパイルされている場合)
ソリューション:
いくつかの理由で、実際のユーザーコントロールのコントロールidを使用する必要がある場合があります.
すでに書いたjsイベント、cssスタイルなど
元のコントロールid番号を復元する必要があります
1.現在のjsファイルとcssファイルを修正するにはclassを使用して処理するが、この方法はあまりにも頼りにならない.
2.jsファイルを書くasp.Netで生成されたid番号をユーザーコントロールid番号に置き換え、使用するページごとに参照すればよい
再送要求がある場合は、再送前にaspを復元することができる.Netで生成するclientid番号はaspに影響しない.Netの再送処理
3.asp.Netページでコードを置き換えると、再送時に対応するコントロールidが見つからず、本物のコントロールが見つからずビジネス処理に影響します.
参照先:
MSDN Control.ClientID属性
為知ノート(Wiz)から
すなわち、ページ内のコントロール内のコントロールClientID=ユーザーコントロールid番号+""+ユーザーコントロール内のコントロールのid番号
あまりにも回りくどいことを言っているので,やはり次の例を見てみましょう.
aspでNetページindex.aspxにheadが追加されました.ascxユーザーコントロールid番号は「
head1
"
head.ascxコントロールにinput#hid_がありますnameコントロール
ではaspxが最終的に生成したinputのidは「head 1_hid_name」
"
MSはなぜこのように設計したのですか?
主にaspです.Netのすべてのコントロールには一意のid番号があります(
ClientID
)、ページが再送されると.Netはこのid番号で再送後の後続処理を行うことができます
一方、1つのページに複数のユーザーコントロールが含まれている場合は、1つのユーザーコントロールのid番号が一意である可能性がありますが、1つのページにマージすると重複するid番号が発生する可能性があります.
だからasp.Netは各ユーザコントロールのidの前にそのユーザコントロールのidを追加し、1ページに重複するid番号は表示されません(1ページに重複するid番号がコンパイルされている場合)
ソリューション:
いくつかの理由で、実際のユーザーコントロールのコントロールidを使用する必要がある場合があります.
すでに書いたjsイベント、cssスタイルなど
元のコントロールid番号を復元する必要があります
1.現在のjsファイルとcssファイルを修正するにはclassを使用して処理するが、この方法はあまりにも頼りにならない.
2.jsファイルを書くasp.Netで生成されたid番号をユーザーコントロールid番号に置き換え、使用するページごとに参照すればよい
再送要求がある場合は、再送前にaspを復元することができる.Netで生成するclientid番号はaspに影響しない.Netの再送処理
//htl add 2014-12-25
// id
var _id = 'details1_';
// id id
jQuery("[id*=" + _id + "]").each(function($) {
$(this).attr("id", $(this).attr("id").replace(_id, ""));
// , asp.net id
$(this).attr('usercontrol', '');
});
// asp.net id
jQuery("form").submit(function() {
jQuery("[usercontrol]").each(function() {
$(this).attr("id", _id + $(this).attr("id"));
});
});
3.asp.Netページでコードを置き換えると、再送時に対応するコントロールidが見つからず、本物のコントロールが見つからずビジネス処理に影響します.
/// <summary>
/// htl add 2014-12-25
/// ClientID
/// , ClientID id
/// </summary>
/// <param name="writer"></param>
protectedoverridevoidRender(HtmlTextWriter writer) {
System.IO.StringWriter sw = newSystem.IO.StringWriter();
base.Render(newHtmlTextWriter(sw)); // html, __VIEWSTATE
// ClientID ClientID
//
writer.WriteLine(Web.PageHelp.RegexStr(@details1.ClientID + "_", sw.ToString()).Trim());
}
参照先:
MSDN Control.ClientID属性
為知ノート(Wiz)から