ASP.NET 마스터 페이지 및 파일 경로 문제
-
22-08-2019 - |
문제
마스터 페이지에서 jQuery에 대한 스크립트 참조를 추가하여 모든 페이지에서 작동하도록하려고합니다. 현재 이렇게 보입니다
<script type="text/javascript" src="jquery.js"></script>
문제는 경로가 항상 실행되는 ASPX 페이지와 관련이 있으므로 "jQuery.js"파일이 동일한 폴더에있는 경우에만 작동한다는 것입니다. 작동하려면 라인을 변경해야합니다.
<script type="text/javascript" src="../../jquery.js"></script>
루트 폴더에서 두 레벨의 페이지에서만 작동하기 때문에 이것은 이상적이지 않습니다. 다음을 시도하면 IIS는 예기치 않은 캐릭터에 대한 오류를 던집니다.
<script runat="server" type="text/javascript" src="~/jquery.js"></script>
어떤 아이디어?
편집하다: 스크립트가 헤드 태그에 있어야한다는 것을 언급하는 것을 잊었습니다.
현재의 최고 답변은 "ASP.NET AJAX 클라이언트 측 프레임 워크가로드하지 못했습니다."마스터 페이지에 추가 할 때 오류. .NET 컴파일러가 아닌 JavaScript에서 던져졌습니다. ScriptManager를 헤드 섹션으로 옮기면 ScriptManager가 양식 태그 내부에 있어야하는 Compile 오류가 발생합니다. .
세 번째 대답은 "길에서 불법 인물."컴파일러의 예외
편집 2 : 해당 라인을 헤드 태그에 추가하면 IIS 에서이 오류가 발생합니다.
컨트롤에는 컨트롤에 코드 블록이 포함되어 있으므로 컨트롤 컬렉션을 수정할 수 없습니다 (예 : < % ... %>)
해결 : 아래 답변에서 편집 된 응답을 가져 와서 안에 넣었습니다. ASP : Contentplaceholder 요소
해결책
당신은 a를 사용할 수 있습니다 ScriptManager
:
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="~/jquery.js" />
</Scripts>
</asp:ScriptManager>
편집하다: 만약 너라면 물론 이것을 당신에게 필요로합니다 <head>
섹션, 당신은 다음과 같은 것을 할 수 있습니다.
<head>
<script type="text/javascript"
src="<%= Page.ResolveClientUrl("~/jquery.js") %>"></script>
</head>
편집 2 : 의견에 따르면, 당신이 그것을 관찰하고 있다면
컨트롤에는 컨트롤에 코드 블록이 포함되어 있으므로 컨트롤 컬렉션을 수정할 수 없습니다 (예 : < % ... %>)
데이터 바인딩 구문을 사용하려면 위의 내용을 변경해야 할 수도 있습니다.
<head>
<script type="text/javascript"
src="<%# Page.ResolveClientUrl("~/jquery.js") %>"></script>
</head>
다른 팁
노력하다 <%#
대신에 <%=
헤드 섹션 아래 마스터 페이지에서
<script type="text/javascript"
src="<%# ResolveUrl("~/YourScriptFolder/YourJQueryOrJavascript.js") %>">
</script>
그런 다음 아래의 마스터 페이지 뒤에 코드에 있습니다 Page_Load
이벤트
Page.Header.DataBind();
이제 당신은 jQuery와 JavaScript와 함께 가고 CSS와 함께 가면 경로를 변경해야합니다. ResolveUrl
CSS, JavaScript, JQuery를 처리하려는 파일.
ASP : ScriptManager 또는 Absolute Paths에 가지 않으면 다음과 같이 할 수 있습니다.
<script runat="server" type="text/javascript"
src='<%= Page.ResolveUrl("~/jquery.js") %>'></script>
나는 당신이 당신의 문제에 대한 해결책을 찾았는지 여부를 모릅니다. 내가 사용하는 플러그인에서 왜 "jQuery가 정의되지 않은"오류를 얻는 이유를 알아 내기 위해 같은 문제에 직면하고있었습니다. 인터넷에서 얻는 모든 솔루션을 시도했지만 운이 전혀 사용하지 않았습니다.
그러나 갑자기 스크립트 파일 일 수있는 내 마음에 무언가가 튀어 나와야합니다. 그래서 jQuery Referece를 첫 위치로 옮겼으며 모든 것이 매력처럼 작동하기 시작했습니다.
jQuery가있는 플러그인을 사용하는 경우, 해당 필드에 대한 참조를 설정하는 Folloing 순서를 사용해야합니다.
- jQuery 라이브러리에 대한 참조
- 다른 후속 플러그인 라이브러리 등을 참조하십시오 ...
예 :
- "스크립트 src ="js/jquery-1.3.2.min.js "type ="text/javaScript "...
- "스크립트 src ="js/jqdnr.min.js "type ="text/javaScript "...
- "스크립트 src ="js/jquery.jqpopup.min.js "type ="text/javaScript "...
- "스크립트 src ="js/jquery.bgiframe.min.js "type ="text/javaScript "...
항상 jQuery 참조를 먼저 다음 후속 라이브러리에 넣어야합니다.
희망, 이것은 특히 마스터 페지와 함께 사용할 때 문제를 해결합니다. Mas
행운과 행복한 코딩,
Vincent D 'Souza
보다 루트 "/"를 실행하는 방법. 이것은 해결되지 않은 모든 문제를 해결해야합니다 .js
파일 경로. 귀하는 기본적으로 VS Dev 서버를 재구성하여 응용 프로그램을 실행합니다. localhost:port/
정규와 달리 localhost:port/application name/
이름 해상도가 IIS와 같은 방식으로 작동합니다.
<script type="text/javascript" src="/full/path/to/jquery.js"></script>
이 스크립트 태그가 브라우저로 직접 이동하면 사이트의 루트를 대체 할 수 없을 것입니다. 적어도 서버에 있지 않습니다. 그래서 당신은 할 수 있습니다 :
- 사이트를 도메인 이름의 루트에 배치하고 절대 경로 (가장 간단한 솔루션)를 사용하십시오.
- 이 링크를 서버 컨트롤에 삽입하십시오.
- HTML을 클라이언트로 보내기 전에 HTML을 선불로 처리합니다 (httpresponse.filter 포함).
당신은 또한 사용할 수 있습니다u003Cbase> HTML 태그 :
<base href="http://www.domain.com"></base>
그런 다음 헤더 섹션의 모든 링크는 기본 주소와 관련이 있습니다.
<script type="text/javascript" src="scripts/jquery.js"></script>
로컬 데브 웹 서버, 데모 서버 등과 같은 여러 출판 목적지가있을 때 종종 유용합니다. 해당 기본 URL을 교체합니다.
<body>
<script language="javascript" src='<%= this.ResolveClientUrl("~/full/path/to/jquery.js") %>' type="text/javascript"></script>
</body>
모든 페이지에 대한 파일의 절대 경로의 경우 다음을 사용하십시오.
<script type="text/javascript" src="<%= Page.ResolveClientUrl("~/jquery.js") %>"></script>