문제

나는 약간의 문제를 겪었고 약간의 파기를했지만 결정적인 답변/수정을 내기 위해 고군분투했습니다.

기본적으로, 나는 whizzbang을 페이지 요소로하여 예쁘게 보이게하는 JavaScript (제 3자가 제작)를 가지고 있습니다. 이 코드는 단일 페이지 (예 : 마스터 없음)에서 훌륭하게 작동하지만 마스터 내의 컨텐츠 페이지에 효과를 적용하려고하면 작동하지 않습니다.

요컨대, 기본 스크립트 참조가 포함 된 마스터 페이지가 있습니다. 모든 페이지는 스크립트를 사용하지만 전달 된 매개 변수는 컨텐츠 페이지마다 다릅니다.

마스터 페이지 스크립트 참조

<script src="scripts.js" language="javascript" type="text/javascript" />

단일 페이지

<script>
    MakePretty("elementID");
</script>

보시다시피, 각 페이지에서 참조가 필요하지만 (따라서 마스터에 있으면) "MakePretty"를 원하는 실제 요소는 컨텐츠에 따라 변경됩니다.

컨텐츠 페이지

이제 콘텐츠 페이지가 없기 때문에 <head> 요소, 다음 코드를 사용하여 마스터 페이지에 추가했습니다. <head> 요소:

HtmlGenericControl ctl = new HtmlGenericControl("script");
ctl.Attributes.Add("language", "javascript");
ctl.InnerHtml = @"MakePretty(""elementID"")";
Master.Page.Header.Controls.Add(ctl);

이제,이 작동하지 않습니다. 그러나 내가 간단한 것으로 바꾸면 alert("HI!"), 모두 잘 작동합니다. 따라서 코드가 추가되고 있습니다. 코드가 무엇을하고 있는지에 따라 항상 실행되는 것은 아닙니다.

이제 파기를 한 후, 나는 콘텐츠 페이지가 Load 마스터 페이지 앞에서 이벤트가 제기되지만 효과가있을 수 있지만 페이지의 JavaScript가 모두 한 번에로드/실행되었다고 생각 했습니까?

이것이 바보 같은 질문이라면 저를 용서해주십시오. 그러나 나는 여전히 마스터 페이지 시나리오에서 JavaScript를 사용하는 것이 비교적 새로운 것입니다.

Mas

이 사람들에 대한 모든 도움을 주셔서 감사합니다.이 작업 문제에 대해 저를 도와 드리겠습니다.

메모:

  • RegisterStartupScript 그리고 같은 사람은 어떤 수준에서도 작동하지 않는 것 같습니다 ..
  • MasterPage 환경에서도 제어 ID가 정상으로 설정되어 있으며 예상대로 렌더링되고 있습니다.

사과하시면이 중 어느 것이 불분명 한 경우, 나는 정말로 피곤하므로, 필요하다면 다시 단어/설명이 필요한지 의견을주십시오.

도움이 되었습니까?

해결책

Master Page의 헤드 섹션에 Contentplaceholder를 넣은 다음 자리 표시자를 참조하는 컨텐츠 페이지에 ASP : 컨텐츠 제어를 추가하고 해당 컨트롤에 스크립트를 넣으십시오. 이 방법으로 각 페이지에 대해 사용자 정의 할 수 있습니다.

또한 Mas 따라서 예상대로 "ElementID"대신 "CTL00_MainContentPlaceHolder_ElementID"를 출력 할 수 있습니다.

다른 팁

깨끗한 자바 스크립트와 관련이 없습니까?-)

-바디 태그 내부에 이와 비슷한 것을 추가하십시오.

<script type="text/javascript">
  window.onload = function(){
    MakePretty("elementID");
  }
</script>

그건 그렇고 스크립트 태그에는 엔드 태그가 있어야합니다.

<script type="text/javascript" src="myScript.js"></script>

jQuery를 사용하여 모든 컨트롤을 찾지 않는 이유는 무엇입니까? 이 같은:

$(document).ready(function(){
  $("input[type='text'], input[type='radio'], input[type='checkbox'], select, textarea").each(function(){
    MakePretty(this);
  });
});

이렇게하면 페이지에 모든 요소가 표시되면 페이지가 준비 될 때까지 기다릴 수 있습니다 (따라서 DOM을 비유 적으로 수정하지 않음). JQuery 선택기는 필요한 경우 요소를 특정 형식으로 조금 더 가져올 수 있습니다 (즉, 본문 DIV의 ID와 같은 루트 요소를 추가).

또한 MakePretty 메소드를 수정하는 것이 가장 좋으므로 ID가 아닌 요소를 매개 변수로 사용하여 처리 오버 헤드를 줄입니다.

마스터 페이지를 사용하면 클라이언트 측의 컨트롤 ID가 귀하가 생각하는 것이 아닙니다. 스크립트를 생성 할 때 Control.ClientID를 사용해야합니다.

Mas

귀하의 JavaScript가 ID를 통해 CSS 스타일을 적용하고 있다고 가정하고, 마스터 페이지를 사용하는 경우 ID는 ASPX에있는 것과 다릅니다. JavaScript가 항상 추가되는지 확인하면 다음을 고려해야합니다.

  • 항상 페이지로드에서 마스터 페이지 ID를 설정하십시오 (this.id = "myPrefix";)
  • 마스터 페이지의 모든 HTML 요소는 마스터 페이지 ID에 의해 접두사가됩니다 (예 : 렌더링 된 페이지는 "myprefix_mydiv").
  • 콘텐츠 장소 홀더 ID의 모든 HTML 요소는 추가 접두사 (예 : myprefix_contentplaceholderid1_mydiv)로 접두사가 표시됩니다.

내가 명확히 할 수 있는지 알려주세요. 도움이 되었기를 바랍니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top