2009-05-22 6 views
5

의 동작을 변경 등의 UserControls 추가 RUNAT 내가 어떤 컨트롤이있는 페이지가 레이아웃

나는 <div id="foo" runat="server"> 레이아웃 완전한 변화에 일반 <div id="foo">에서 사업부를 변경

.

왜 그런가요? 어떻게 방지 할 수 있습니까?

나는 .NET 내 아이디, 내가 원하지 않는 분명히 변경하기 때문에

그것을 2.0 .NET 프레임 워크를 사용하고 있습니다?

+0

귀하의 상황을 더 잘 이해할 수 있도록 코드 샘플을 제공해주십시오. –

+0

사용자 지정 특성이나 스타일 추가와 같이 모든 컨트롤 (runat = "server"가있는 컨트롤)에 적용되는 서버 쪽 코드가 있습니까? –

+1

아니면 더 나은 점은 div의 CSS 스타일 지정 ID가 있습니까? runat = "server"를 추가하면 렌더링 할 때 해당 컨트롤의 ClientID가 변경되어 CSS가 손상됩니다. –

답변

12

CSS에서 div 컨트롤의 ID를 대상으로 설정 한 다음 서버에서 컨트롤을 실행하면 스타일이 더 이상 적용되지 않습니다.

ASP.NET에는 같은 이름의 컨트롤이 여러 개 없기 때문에 ASP.NET에는 메커니즘 (INamingContainer)이 내장되어 있기 때문입니다.

<div id="ctl00_ctl00_myDivName" runat="server" /> 

이 주변에 가장 쉬운 방법은 클래스 작업에 ID에 작동을 변경하는 것입니다 : 당신이 결국 있도록 컨테이너 접두사를 추가하여이 작업을 수행 또는

<div class="myDiv" runat="server"></div> 

, I XHTML은 div를 확실히 당신의 ID가없는 닫는 태그 그래서 이것은 것 ClientMode = "정적" 추가

<div runat="server">Some content</div> 
0

div에 runat = "server"를 추가하면 시스템에서 자동으로 해당 ID를 생성합니다. ID 맹 글링이라고합니다. 안타깝게도 내가 아는 div의 2.0 프레임 워크에서 할 수있는 일은별로 없지만 (어쨌든 고통 없이는), 4.0에서는 재정의를 얻고 있습니다 ... 사용자 정의 컨트롤에서 (2.0에서는) ClientID 및 UniqueID 필드를 무시할 수 있습니다. 따라서 div를 기본으로 사용한 MyDiv 클래스를 만든 다음 ClientID/UniqueID 필드를 만들면 괜찮습니다.

다른 옵션은 변경된 ID를 사용하도록 CSS/javascript를 업데이트하는 것입니다. ASP.Net은 포스트 백 동안 컨트롤을 찾기 위해 페이지를 사용하기 때문에 페이지 내의 위치에 따라 상당히 정적입니다.

+0

스타일링에서 ID가 엉망인 것을 제안하면 놀랍습니다. CSS를 더 이상 적용하지 않을 제어 계층 구조를 변경했다면 말입니다. 내 책에서 나쁜 습관. 클래스를 사용하도록 스와핑하면 훨씬 더 유지하기 쉬운 옵션입니다. –

+1

CSS에서 맹 글링 된 ID를 사용하지 않겠습니다. –

+2

나는 그것이 좋은 선택이라고 결코 말하지 않았다. 그냥 옵션. – JaCraig

0

를 사용 있어야 있다고 생각 귀하의 통제를 위해 고객 ID로 변경되었습니다.

관련 문제