2014-12-30 4 views
0

좋아요, 여기에 시나리오가 있습니다 :.Net 3.5의 기본 idseparator를 변경 하시겠습니까?

우리는 레거시 웹 프로젝트를 .Net 1.1에서 .Net 3.5로 이식했으며 대부분 의도 한대로 작동합니다.

asp.net에서 webcontrols의 이름을 렌더링하는 idseparator가 .Net 2.0의 ":"에서 "$"로 변경된 경우에도 로컬 개발 컴퓨터는 여전히 Asp.Net 컨트롤을 렌더링합니다. 이름의 idseparator로 ":"를 사용합니다.

하지만 웹 프로젝트를 테스트 서버 중 하나에 배포 할 때 동일한 asp.net 컨트롤이 "$"를 아이디 구분자로 사용하여 렌더링되었습니다.

그래서,

질문 1 : 은 왜 우리의 테스트 서버에서가 아니라 우리 지역의 기계에서이 동작 방법을?

질문 2 :올바른 기본 문자 구분 기호 ("$")를 렌더링하도록 로컬 개발 컴퓨터를 "수정"해도 asp.net 컨트롤이 이름을 사용하여 렌더링하는 일부 기존 js 코드가 손상됩니다. ":"구분 기호. 테스트 서버에서 기본 문자 구분 기호를 콜론 (":")으로 다시 바꿀 수 있습니까?

답변

0

.NET Reflector에서 UniqueID가 생성되는 방법에 대한 간략한 검토를 통해 Web.Config에서 <xhtmlConformance mode="Legacy" />을 사용하여 "$"대신 ":"을 가져올 수 있음을 보여줍니다.

하지만 다른 문제가 발생할 수 있습니다.

세부 사항 :

UNIQUEID 생성시 구분 문자를 얻을 intenally 사용되는 보호 특성 Control.IdSeparator이있어 :

protected char IdSeparator 
{ 
    [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] 
    get 
    { 
    if (this.Page != null) 
    { 
     return this.Page.IdSeparator; 
    } 
    return this.IdSeparatorFromConfig; 
    } 
} 

IdSeparatorFromConfig

internal char IdSeparatorFromConfig 
{ 
    get 
    { 
    if (!this.EnableLegacyRendering) 
    { 
     return '$'; 
    } 
    return ':'; 
    } 
} 

EnableLegacyFromConfig입니다

입니다
+0

그게 완벽합니다! –