Programing

ASP.NET MVC로 마스터 페이지에서 스크립트 사용

lottogame 2020. 11. 5. 07:39
반응형

ASP.NET MVC로 마스터 페이지에서 스크립트 사용


저는 ASP.NET MVC를 처음 접했고 스크립트에 약간의 문제가 있습니다. 특히 대부분의 페이지에서 jQuery를 사용하고 싶기 때문에 마스터 페이지에 넣는 것이 좋습니다. 그러나 내가 할 경우 (내에서 ~/Views/Shared/Site.Master) :

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

그런 다음 그것은 말 그대로 클라이언트로 내려가는 것입니다. 물론 현재 경로가 올바른 수준의 수준을 갖는 경우에만 작동합니다. 로 시작하는 ~/Scripts/...것은 작동하지 않습니다. 로 시작 /Scripts/...하면 프로젝트가 사이트 루트에있는 경우에만 작동합니다 (내가 가정하고 싶지 않음).

한 가지 작업 접근 방식이 있습니다 (아래에 게시하겠습니다).하지만 : 뭔가 빠졌나요?

ASP.NET MVC 모델의 단순성을 무너 뜨리는 것처럼 보이기 때문에 스크립트 관리자를 개입시킬 필요가 없습니다 ... 아니면 너무 걱정하고 있습니까?

사소하지 않은 가상의 경우에도 작동하는 방법은 다음과 같습니다.하지만 지나치게 복잡해 보입니다.

<script src="<%=Url.Content("~/Scripts/jquery-1.2.6.js")%>" type="text/javascript"></script>

스크립트 참조를 추가하는 몇 가지 메서드가있는 AppHelper 클래스가 있습니다.

public static string ReferenceScript(string scriptFile)
{
    var filePath = VirtualPathUtility.ToAbsolute("~/Scripts/" + scriptFile);
    return "<script type=\"text/javascript\" src=\"" + filePath + "\"></script>";
}

따라서 마스터 페이지에서 다음을 사용할 수 있습니다.

<%= AppHelper.ReferenceScript("jquery-1.2.6.js") %>

가장 간단한 방법은 다음을 사용하는 것이며보기에서 작동합니다.

<script type="text/javascript" src="<%=ResolveUrl("~/Scripts/myscript.js") %>">

</script>

다른 답변을 기반으로, 아마도 Eduardo의 답변과 유사한 Html의 확장 방법 (MVC에 매우 일반적 임)입니다.

 <%=Html.Script("~/Scripts/jquery-1.2.6.js")%>

와:

public static string Script(this HtmlHelper html, string path)
{
    var filePath = VirtualPathUtility.ToAbsolute(path);
    return "<script type=\"text/javascript\" src=\"" + filePath + "\"></script>";
}

Google의 js 파일 호스팅 에서 마스터 페이지를 가리 키지 않는 이유는 무엇 입니까? 그렇다면 배포 (사이트가 Net에 연결되어 있다고 가정)에 관해서도 사전 캐시 된 jquery 파일을 남용 할 수 있습니까?


OJ가 언급 한 내용 중 일부를 만들었고이 메서드로 GoogleHelper 클래스를 만들었습니다.

public static string ReferenceGoogleAPI()
{
    var appSettings = new AppSettingsReader();
    string apiKey = appSettings.GetValue("GoogleApiKey", typeof(string)).ToString();
    return ReferenceGoogleAPI(apiKey);
}

public static string ReferenceGoogleAPI(string key)
{
    return "<script type=\"text/javascript\" src=\"http://www.google.com/jsapi?key=" + key + "\"></script>";
}

public static string ReferenceGoogleLibrary(string name, string version)
{
    return "<script type=\"text/javascript\">google.load(\"" + name + "\", \"" + version + "\");</script>";
}

이제 ClientLocation 데이터를 얻기 위해 추가 메서드를 추가하고 있습니다.)


직장에서 우리는 뒤에있는 ASP 코드에서 다음과 같은 작업을하고 있습니다.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  Const jQuery As String = "jQuery"

  With Me.Page.ClientScript
    If Not .IsClientScriptIncludeRegistered(jQuery) Then
      .RegisterClientScriptInclude(jQuery, VirtualPathUtility.ToAbsolute("~/Includes/jQuery-1.2.6.js"))
    End If
  End With
End Sub

ASP.NET MVC로 그렇게 할 수 있는지 모르겠습니다.


ResolveUrl은 가장 우아한 솔루션 IMO입니다. 정말 부끄러운 일이지만 CSS URL은 스크립트가 아닌 runat = server에 의해 해결됩니다.


squish와 같은 유틸리티를 사용하는 것을보아야합니다. 모든 css 및 js 파일을 집계하고 난독화할 수 있습니다. 또는 ForceDebug ()를 사용하여 디버그 상태로 유지하는 경우 스크립트 태그를 생성하는 데 사용할 수 있습니다.

http://www.codethinked.com/squishit-the-friendly-aspnet-javascript-and-css-squisher


슬래시 (/)를 사용합니다. 예를 들면 :

<script src="/Script/jquery-1.4.1.js"></script>

"jquery-1.4.1.js"파일이 루트의 Script 디렉토리에있을 때. 그리고 완벽하게 작동합니다.


Our applications are deployed using virtual directories, and we have had some issues with other answers mentioned here (not resolving the path correctly). One way that worked well, (not the only way mind you), was to use this:

<script src="<%=Request.ApplicationPath%>/Web/AppName/JavaScript/jquery-1.4.1.js"></script>

You can try Url.Content extension method with Razor syntax

<script src="@Url.Content("~/Scripts/jquery.min.js")" type="text/javascript"></script>

참고URL : https://stackoverflow.com/questions/347528/using-scripts-in-a-master-page-with-asp-net-mvc

반응형