2010-01-16 9 views
4

Silverlight 컨트롤에서 ASP.NET 웹 양식 페이지로 뭔가를 밀어 넣어야합니다.ctl00_PagePlaceHolder_myId가 동일하게 유지 될 수 있습니까?

내 텍스트 상자의 ID를 설정하고 원하는대로 ASP.NET은 "유용하게"ctl ... blah_blah 항목을 추가합니다. 이것이 내 이드의 시작 부분에 항상 넣는 것과 같은 것이라고 생각할 수 있습니까?

친절,

편집 : 답변들 주셔서 감사합니다. 내 실버 라이트 컨트롤에서 HtmlPage.Document를 사용

, 나는 아니, 그것은 쉽게 당신이 이제까지 그것의 앞에 다른 컨트롤을 추가 할 경우 변경하거나 둥지를 할 수와 같은 더그의 솔루션 ...

var spec = HtmlPage 
      .Document 
      .GetElementsByTagName("input") 
      .FirstOrDefault(so => ((HtmlElement)so).CssClass == "spec"); 

답변

4

을 사용 다른 컨트롤에서. 또한 ID는 브라우저에 따라 다릅니다. 어떤 브라우저에서는 _ 다른 브라우저로 .NET으로 나뉘어 $을 사용합니다. 실버 라이트와 함께 작업 한 적이 없지만 특정 클래스의 요소를 찾을 수 있습니까? 요소에 클래스 이름을 적용 할 수 있으며 ASP.NET은 요소를 전혀 편집하지 않습니다.

+0

감사합니다. Doug. 좋은 생각 RE : cssclass ... 나는 그 기회를 줄 것이다. –

+0

귀하의 솔루션을 사용하여 편집 된 질문 ... 귀하와 Joel에게 다시 감사드립니다 !! –

4

아니요. 경우에 따라 다르게 렌더링 할 수 있으며 페이지의 다른 부분에서 변경하면이 컨트롤이 변경 될 수 있습니다. 이 문제를 해결하는 올바른 방법은 컨트롤의 .ClientID 속성을 참조하는 것입니다.


업데이트

이 내가 일반적으로 클라이언트 ID를 처리하는 방법이다 : 나는 머리 요소에 스크립트 을 넣어

<head runat="server"> 
    ... 
    <script language="javascript"> 
    var ControlIDs = { 
     SomeControl = <%="'" + SomeControl.ClientID%>', 
     OtherControl = <%="'" + OtherControl.ClientID%>' 
    }; 
    </script> 

    ... other script references here ... 
</head> 

는 다른 스크립트 파일에 접근 가능 있도록; 이 방법은 asp.net 프로세서를 통해 자바 스크립트 파일을 전달할 필요가 없으며 한 번만 각 클라이언트 ID를 작성해야합니다. '및 \ 문자는 결코 렌더링 된 클라이언트 ID의 일부가 아니기 때문에 아무 것도 이스케이프 처리 할 필요가 없습니다. controlIDs 개체의 이유는 다른 스크립트와의 충돌을 피하는 것이므로 서버 코드에서 앞에 '' '를 연결하는 이유는 asp.net이 <%을 그렇지 않으면 볼 수 없기 때문입니다.

다시 : 이것은 일반적으로 내가하는 일이지만, 일부 간단한 페이지에서는 과도 할 수도 있습니다.

+0

고마워, 조엘! 이 사건이 생길 때 몇 가지 예를 들려 주시겠습니까? –

+0

@ Doug의 대답을 참조하십시오. 그는 꽤 잘 커버. 요점은 ClientID 속성을 사용해야한다는 것입니다. –

+0

가장 좋은 방법은 무엇입니까? ''그런 것 같습니까? –

0

이것은 현재 도움이되지 않을 수 있지만 .NET 4.0의 새로운 기능은 새로운 동작 ClientIDMode property입니다.이 동작을 둘러싼 두통을 완화 할 수 있습니다. 특히 PredictableStatic 설정을 사용하면 쉽게 확인 된 ID가 산출됩니다. 이전 링크를보고 예측 가능한 모드의 예를 보려면 아래로 스크롤하십시오. 나는 또한 ASP.NET Web Server Control Identification을 읽을 것을 제안합니다.

관련 문제