2008-09-15 6 views
2

ASP.net mvc 사이트의 마스터 페이지에서 약간의 작업을 시작했으며 질문이 있습니다. 마스터 페이지의 스타일 시트에 링크 할 때 시트에 대한 경로를 올바르게 업데이트하는 것처럼 보입니다. 그건 내가 페이지가 브라우저에 공급되면 내가 완벽마스터 페이지의 경로

<link href="Content/Site.css" rel="stylesheet" type="text/css" /> 

을 얻을 소스에서 찾고

<link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 

하지만

이 코드입니다. 그러나 동일한 경로 변환이 스크립트 파일에 대해 작동하지 않는 것처럼 보입니다.

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

도 마찬가지입니다. 그것은 여전히 ​​최상위 페이지에서 작동하는 것하지만 그저 내 오류를 수정 브라우저/웹 서버 용의자. src 경로가 globbed되도록하는 방법이 있습니까?

답변

3
<script src="<%= ResolveClientUrl("~/Content/menu.js") %>" type="text/javascript"></script> 
+0

최고 ResolveClientUrl에 RUNAT = "서버"를 추가하거나 위치를 포장 할 필요가 있으므로,이 웹에서 누락 된 내용을 정확히하고, 서버 측 교체 페이지가 처음 시작된 이후 – stimms

+0

에있는 경우 <% #을 사용하고 데이터 대신 데이터를 호출하는 것이 더 나을 수 있습니다. <% = 컨테이너에 동적으로 추가하는 것을 막습니다. 많은 웹 컨트롤이 자동으로 수행됩니다. – Keith

0

사용이 대신 :

<link href="~/Content/Site.css" rel="stylesheet" type="text/css" /> 
+0

작동하지 않습니다 - ~ /는 당신이 – Keith

1

이 확장 방법을 확인하십시오. 여기 방법입니다 :

public static string ResolveUrl(this HtmlHelper helper, string virtualUrl) 
{ 
    HttpContextBase ctx = helper.ViewContext.HttpContext; 
    string result = virtualUrl; 

    if (virtualUrl.StartsWith("~/")) 
    { 
     virtualUrl = virtualUrl.Remove(0, 2); 

     //get the site root 
     string siteRoot = ctx.Request.ApplicationPath; 

     if (!siteRoot.EndsWith("/")) 
      siteRoot += "/"; 

     result = siteRoot + virtualUrl; 
    } 
    return result; 
} 

당신은 다음과 같은 스크립트 심판 작성할 수 있습니다

<script type="text/javascript" src="<%= Html.ResolveUrl("~/Content/menu.js")%>"></script> 
0

또는 당신은 페이지의 HEAD 섹션을 BASE 태그를 사용할 수 있습니다. 그런 다음 모든 링크는 "기본"태그에 입력 된 위치에 상대적이므로 "../../"및 "~"항목을 사용할 필요가 없습니다. CSS 파일 (배경 URL 등)의 링크를 제외하고 링크는 CSS 파일의 위치와 관련이 있습니다.

관련 문제