2014-11-25 2 views
0

무슨 일이 일어나고 있는지 알고 싶기 때문에 편지를 씁니다.

내 코드에서는 컨트롤을 동적으로 System.Web.UI.WebControls.GridView에 추가합니다 (확장했습니다). 페이지에서 몇 가지 작업을 수행 한 후 Page.Request["__EVENTTARGET"]의 컨트롤 ID가 이전에 ViewState에 저장 한 ID인지 확인합니다.

켜기 .0.03 모든 것이 잘 작동하지만 프로젝트를 .Net 4로 전환 한 후 Page.Request["__EVENTTARGET"]이 상속 된 ClientId를 반환하고 ViewState에서 내 제어의 짧은 ID 만 유지하므로이 기능이 작동하지 않습니다. 나는 Page.FindControl 방법을 사용하여 그것을 고쳤다. 그것은하지만 텍스트 상자에, LinkButtons, 버튼 및 드롭 다운 작동, 내 텍스트 상자의 Page.Request["__EVENTTARGET"] 반환 이름 ...

그래서 나는 'string$string' 같은 정적 내 텍스트 상자에 대한 ClientIdMode을 변경할 수 있기 때문이다. 그러나 여전히 Page.FindControl은 null을 반환했습니다. TextBox가 동적으로 생성되고 일부 컨트롤에 중첩되어 있으면이 메서드는 찾을 수 없다는 것을 읽었습니다.

첫 번째 질문. 왜 Page.FindControl 메서드는 중첩 TextBox를 찾을 수 없지만 DropDown 또는 LinkButton과 같은 다른 컨트롤을 처리 할 수 ​​있습니까?

하지만이 문제도 처리합니다. Page.FindControl의 재귀 적 종류를 썼는데 TextBox를 찾을 수 있습니다. 그러나이 순간 나는 다시 문제를 겪었습니다. 이 TextBox의 값은 오래된 것입니다 (6을 쓰지만 Text 속성에는 여전히 1입니다). 내 첫 번째 아이디어는 너무 일찍 그렇게했기 때문입니다 - OnPagePreLoad 방법입니다.

그러나 그때 나는 TextBox의 ID를 string$string에서 'string_string'으로 변경하고 텍스트 상자의 값은 내가 작성한 것입니다.

그리고 이것은 내 두 번째 질문입니다. 왜 달러 ($) 기호 때문에 이전 값을 보았습니까?

감사합니다.

답변

0

$ 문자는 ID 속성에서 유효하지 않습니다.

영숫자와 밑줄 문자 (_) 만 조합이 부동산에 대한 유효한 값이며, 자세한 내용은 구체적으로

에 대한 this Microsoft article를 참조하십시오. 공백이나 다른 잘못된 문자를 포함하면 ASP.NET 페이지 구문 분석기 오류가 발생합니다.

또한 IdSeparator 속성에 대해서는 this Microsoft article을 참조하십시오.

은 특히 :

이 API는 .NET Framework 인프라를 지원하며 사용자 코드에서 직접 사용할 수 없습니다.

따라서 $을 밑줄로 바꾸는 것이 올바른 대답 인 것 같습니다.

관련 문제