문제

본문의 onload를 사용하여 실행 해야하는 JavaScript가 포함 된 마스터 페이지를 사용하는 뷰가 있습니다. 특정 조회수에 대해서만 마스터 페이지에서 Onload를 설정하는 가장 좋은 방법은 무엇입니까?

아이디어에서 내가 시도한 것은 JavaScript 함수의 이름을 ViewData로 전달하는 것이 었습니다. 그러나 나는 내 컨트롤러가 페이지의 JavaScript에 대해 알아야하는 것을 정말로 원하지 않습니다. 나는이 접근법이 정말 마음에 들지 않는다 ...

<body onload="<%=ViewData["Body_OnLoad"]%>">
<asp:ContentPlaceHolder ID="MainContent" runat="server" />

편집 - 나는 하나의 아이디어가 대신 jQuery의 문서 준비 이벤트를 사용하는 것이라고 생각합니다 ...

다른 아이디어가 있습니까?

도움이 되었습니까?

해결책

현재 MVC 프로젝트와 함께 다음 패턴을 사용해 왔으며 지금까지 .JS 작업에 꽤 잘 작동하는 것 같습니다 ...

마스터 페이지 내에 모든 콘텐츠 페이지 (jQuery.js, global.js, jQuery-Plugins, .CSS 파일 등)에 사용하려는 표준 스크립트 파일을로드합니다. 그런 다음 마스터 페이지에 필요한 이벤트 (Onload, OnSave 등)를 정의합니다. 내가 만든 각 콘텐츠 페이지에는 자체 .js 파일이 연결되어 있으며 Content .aspx 페이지에 해당 스크립트 파일을로드합니다. 컨텐츠 페이지간에 다르게 구현 해야하는 .js 이벤트는 개별 컨텐츠 .js 파일 내에서 처리됩니다. 따라서 기본적으로 내 마스터 페이지에는 내 컨텐츠 페이지 스크립트가 구현할 .js 기능 세트가 있습니다. 지금 당장 해당 템플릿 .js 함수 서명을 파일에 저장하고 작성 해야하는 모든 새 content.js 파일에 붙여 넣습니다. 그러나 생성 해야하는 새로운 .js 파일 에서이 템플릿 서명을 뱉어내는 코드 생성기 또는 도구를 구축 할 생각입니다 (.JS에 어떤 형태의 인터페이스 기능이 있거나 상속 기능이있는 경우) 알려주세요).

그래서 요약하려면 :

MasterPage.mas

ContentPage로드 : ContentPage.js

Global.js에는 다른 글로벌 일상 기능과 함께 컨텐츠 페이지간에 변경되지 않는 마스터 페이지가 호출하는 기능이 포함되어 있습니다.

각 contentpage.js는 컨텐츠 페이지에 대한 자체 기능과 다른 동작이있는 마스터 페이지가 호출하는 기능과 함께 자체 기능을 구현합니다.

다른 팁

이제 jQuery는 공식적으로 ASP.NET MVC의 일부이므로 사용하는 것이 좋습니다. 작고 응용 프로그램에 많은 가치를 더합니다.

Intellisense 의견이 포함 된 Mustafa의 jQuery 버전을 추가하는 것이 좋습니다.

jQuery-1.2.6-Intellisense.js

그런 다음 스크립트 폴더 (MVC 베타 1의 새)에 추가하고 다음과 같이 참조하십시오.

<script language="javascript" type="text/javascript" src="../../Scripts/jquery-1.2.6-intellisense.js"></script> 

코드에서 다음과 같은 기능을 추가 할 수 있습니다.

$(document).ready(function() {
   // do stuff when DOM is ready
});

특정 조회에서만 발생하기를 원한다고 언급 했으므로 마스터 페이지에 다음과 같은 자리 표시자를 추가 할 수 있습니다.

<asp:contentplaceholder id="JavascriptPlaceholder" runat="server"></asp:contentplaceholder>  

그런 다음 귀하의 관점에서, 당신은 거기에 코드를 넣을 수도 있는지 선택할 수 있습니다.

헤드 섹션 안으로 들어갑니다

블로그의 솔루션 : ASP.NET 2.0 MasterPages와 함께 바디 온로드 사용

Masterpage.master

<head>
<asp:ContentPlaceHolder runat="server" id="Headers">
</asp:ContentPlaceHolder>
<script language=javascript>
   function mp_onload() {
     if(window.body_onload != null)
     window.body_onload();
   }
</script>
</head>
<body onload="mp_onload();">

default.aspx

<asp:Content ID="Content2" ContentPlaceHolderID="Headers" Runat="Server">
<script language="javascript">
   function body_onload()
   {
       //do something
   }
</script>
</asp:Content>
 

어쨌든 jQuery 또는 다른 JavaScript 프레임 워크를 사용해야합니다.

컨트롤러가 뷰에 어떤 종류의 상태 표시기를 전달하도록하지만 JavaScript 기능의 이름과 같은보기별로 전달되지 않습니다. 상태 표시기를 JavaScript 함수 이름에 매핑하는 것은 귀하의 견해에 달려 있습니다.

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