developer tip

ASP.Net 마스터 페이지 및 파일 경로 문제

copycodes 2020. 10. 14. 07:57
반응형

ASP.Net 마스터 페이지 및 파일 경로 문제


모든 페이지에서 작동하도록 마스터 페이지에서 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가 form 태그 안에 있어야한다는 컴파일 오류가 발생합니다.

세 번째 대답은 " 경로에 잘못된 문자가 있습니다. "컴파일러에서 예외가 발생 합니다.

편집 2 : 내 머리 태그에 해당 줄을 추가하면 IIS 에서이 오류가 발생합니다.

컨트롤에 코드 블록 (예 : <% ... %>)이 포함되어 있기 때문에 Controls 컬렉션을 수정할 수 없습니다.

해결 : 아래 답변에서 편집 된 응답을 가져 와서 asp : ContentPlaceHolder 요소 안에 넣었습니다 .


다음을 사용할 수 있습니다 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 : 의견에 따르면 그것을 관찰하는 경우

컨트롤에 코드 블록 (예 : <% ... %>)이 포함되어 있기 때문에 Controls 컬렉션을 수정할 수 없습니다.

데이터 바인딩 구문을 사용하려면 위의 내용을 변경해야 할 수 있습니다.

<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();

이제 ResolveUrlCSS, JavaScript, jQuery를 처리하려는 파일 의 경로를 변경하기 만하면 CSS뿐만 아니라 jQuery와 JavaScript를 사용할 수 있습니다 .


asp : ScriptManager 또는 절대 경로에 가지 않으려면 다음과 같이 할 수 있습니다.

<script runat="server" type="text/javascript" 
  src='<%= Page.ResolveUrl("~/jquery.js") %>'></script>

나는 너희들이 당신의 문제에 대한 해결책을 찾았는지 여부를 모른다. 나는 같은 문제에 직면했고 내가 사용하는 플러그인에서 "jQuery is undefined"오류가 발생하는 이유를 알아 내기 위해 미쳐 버렸다. 나는 인터넷에서 얻은 모든 솔루션을 시도했지만 전혀 운이 없었습니다.

그러나 갑자기 스크립트 파일이 순서가 될 수있는 무언가가 내 마음에 스플래시됩니다. 그래서 jquery 참조를 첫 번째 위치로 옮겼고 모든 것이 매력처럼 작동하기 시작합니다.

jquery와 함께 플러그인을 사용하는 경우 해당 파일에 대한 참조 설정의 다음 순서를 사용하는지 확인하십시오.

  1. jquery 라이브러리에 대한 참조
  2. 다른 후속 플러그인 라이브러리에 대한 참조 등 ...

예 :

  1. "script src ="js / jquery-1.3.2.min.js "type ="text / javascript "...
  2. "script src ="js / jqDnR.min.js "type ="text / javascript "...
  3. "script src="js/jquery.jqpopup.min.js" type="text/javascript"...
  4. "script src="js/jquery.bgiframe.min.js" type="text/javascript"...

Always make sure you must put the jquery reference to first and then the subsequent libraries.

Hope, this solves your problem especially when you use with MasterPages. Its very strange that it works no matter what order you use when you don't use MasterPages but when you do, then it somehow requres the proper order.

Good luck and happy coding,

Vincent D'Souza


Look at How to Run a Root “/”. This should fix all your issues regarding unresolved .js file paths. You basically reconfigure the VS Dev server to run your application as localhost:port/ as opposed to the regular localhost:port/application name/ making name resolution work the same way as it does on IIS.


<script type="text/javascript" src="/full/path/to/jquery.js"></script>

If this script tag goes directly to the browser, then you unlikely can substitute your site's root there. At least not on the server. So you can:

  1. Deploy site to the root of domain name and use absolute paths (simplest solution).
  2. Insert this link with server control.
  3. Preprocess resulting HTML before sending it to the client (with HttpResponse.Filter).

You can also use <base> HTML tag:

<base href="http://www.domain.com"></base>  

and then all the links in header section are relative to base address:

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

It's often useful when you have multiple publishing destinations, like local dev web server, demo server, etc. You just replace that base URL.


<body>
<script language="javascript" src='<%= this.ResolveClientUrl("~/full/path/to/jquery.js") %>' type="text/javascript"></script>
</body>

For absolute path of the file for any page use it following:

<script type="text/javascript" src="<%= Page.ResolveClientUrl("~/jquery.js") %>"></script> 

참고URL : https://stackoverflow.com/questions/697660/asp-net-master-page-and-file-path-issues

반응형