2009-10-27 1 views
3

안녕 포함 된 js 파일을 가져 오는 데 문제가 있습니다.WebResources를 찾을 수없는 이유

  • 가 실행 카시니 개발 서버 (VS2008, .NET 3.5)
  • 추가 [조립 :

    나는 다음의 모든 노력했다 ", WebResource ("MyNamespace.MyScriptFile.js을 "텍스트/javascript ")] 클래스의 네임 스페이스 선언 위에.

  • 스크립트 파일에 빌드 작업 "포함 리소스"가 있습니다.
  • OnInit, OnLoad 및 OnPreRender 중에 등록 시도 중
  • 스크립트 파일은 컨트롤을 등록한 컨트롤과 동일한 어셈블리 및 네임 스페이스에 있습니다.
  • 리플렉터가있는 열린 어셈블리로, 리소스 이름이 올바른지 확인하십시오.
  • 다음 방법 중 하나를 사용하여 작동하지 않습니다 :

    ScriptManager.RegisterClientScriptResource(Page, GetType(), "MyNamespace.MyScriptFile.js"); 
    
    Page.ClientScript.RegisterClientScriptResource(GetType(), "MyNamespace.MyScriptFile.js"); 
    
    Page.ClientScript.RegisterClientScriptInclude(GetType(), "key", 
        Page.ClientScript.GetWebResourceUrl(GetType(), "MyNamespace.MyScriptFile.js")); 
    
    • 다른 WebResource.axd와 파일이 발견되고있다 - 오직이 하나가 발견되지 않습니다.

자원에 대한 요청이 나열된 제외하고 404 페이지를 반환 :

"*Web resource 'MyNamespace.MyScriptFile.js' was not found.*" 

답변

1

것은 자신의 ScriptManger 및 구현하는 시도 : "*[HttpException]: This is an invalid webresource request.*"

ScriptManager.RegisterClientScriptResource을 사용하여 예외를 생성 거기에서 삽입 된 파일을 추가합니다. 여기에 예제가 있습니다

public class MyScriptManager : System.Web.UI.ScriptManager 
{ 
    protected override void OnInit(EventArgs e) 
    { 
      base.OnInit(e); 
      RegisterClientScriptResource(this, typeof(ScriptManagerExtension), "MyNamespace.MyScriptFile.js"); 
    } 
} 
+3

작동 할 수도 있지만 임베디드 리소스를 사용하는 목적 중 하나는 javascript 파일을 어셈블리로 패키지화하여 다른 프로젝트로 내보낼 수 있다는 것입니다. 그런 다음 필요한 리소스를 통해 리소스를 동적으로 추가 할 수 있습니다.내 자신의 ScriptManager를 만들어야한다면 임베디드 리소스를 사용하는 목적이 무의미합니다. – cbp

+0

나는 그 평가에 동의하지 않습니다. 자신의 스크립트 관리자를 갖는 것은 "마법의 끈"에 대한 필요성을 추상화하는 방법입니다. 두 번 이상 써야한다면 "MyNamespace.MyScriptFile.js"가 마법의 문자열이됩니다. 내가 너라면, 나는이 방법을 재사용이 가능하고 목적을 수행하기 때문에 단순히 사용하겠다. – zowens

+0

나는 당신의 해결책을 시험해 보았다. 그리고 그것은 일하고있다 - 고마워! 필자는 대신 ScriptManagerProxy를 사용하여 임베디드 리소스를 적절하게 패키지하고 배포 할 수있었습니다. – cbp

2

어쩌면 리소스 파일이 프로젝트의 폴더 안에 있습니까?) ( 그렇다면, 당신은 어셈블리의 다른 이름/위치 문자열을 지정해야하며, 스크립트

Page.ClientScript.RegisterClientScriptResource(GetType(), "MyNamespace.Folder1.Folder2.MyScriptFile.js"); 

[assembly: WebResource("MyNamespace.Folder1.Folder2.MyScriptFile.js", "text/javascript")] 

를 등록 할 때 일반적으로 즉, 당신이 GetType을에게 전화를하고있다 일반적인 문제 귀하의 예제 코드에서

+0

좋은 지적이지만 슬프게도 루트 디렉토리에 있습니다. – cbp

3

입니다 ... 유형이 검색의 시작점으로 사용됩니다. GetType()을 호출하는 위치에 따라 예상 한 결과를 얻지 못할 수도 있습니다. ASP.NET은 페이지 및 사용자 지정 컨트롤의 형식을 동적으로 컴파일하므로 GetType()은 ASP.NET에서 만든 새 어셈블리에 정의 된 형식을 반환 할 수 있습니다.

대신 Typeof (SomeType)를 시도해 볼 수 있습니다. 여기서 SomeType은 리소스 위치 (예 : 작업중인 컨트롤 유형)에 따라 적절합니다.

+0

감사합니다. 그것은 내 컨트롤 중 하나에서 물려받은 내 문제를 해결했습니다. AppTypely GetType()은 상속 된 컨트롤의 유형을 반환하며 스크립트를 추가하는 기본 컨트롤의 유형은 반환하지 않습니다. – Jeroen

+0

방금 ​​날 구 했어요! – gsharp

0

이 문제의 또 다른 원인은 Global.asax에 지나치게 많은 손해를 겪었고 규칙에 따라 홈페이지를 제공 한 이후로 그 밖의 모든 것을 말한 것입니다. 그다지 영리하지 않아서 1 ~ 2 시간은 낭비되었습니다!