2014-10-29 1 views
1

UrlHelper.Content() 메서드를 재정의했습니다. 이제 기본 구현 대신에 UrlHelper 클래스를 사용하겠습니다.캐시 무효화를 사용하려면 WebViewPage에 UrlHelper 클래스를 삽입하는 방법은 무엇입니까?

WebViewPage.Url 속성에 주입 할 클래스를 지정하려면 어떻게 구성해야합니까?

업데이트 1 :
아이디어는 간단합니다. 번들은 URL에 타임 스탬프 쿼리 매개 변수를 추가하여 캐시 무효화를 지원합니다.
단일 리소스에 대해 동일한 기능을 원합니다.
UrlHelper 클래스는 Content(string) 메서드를 재정의 할 수 있습니다. 따라서 최종 문자열을 생성 할 때 자원의 타임 스탬프를 고려할 수 있습니다.

업데이트 2 :
내 전제가 wrang 인 것처럼 보입니다. 나는 src = "~ ..."가 src = "@ Url.Content ("~ ~ ")"와 같습니다. 그건 사실이 아니야.

답변

1

당신은 Content() 메소드를 오버라이드 (override)합니다 UrlHelper의 자신의 구현을 제공하고 자신의 WebViewPage을 소개하는거야 필요가있어.

첫째, 생성 유형 :

public class MyUrlHelper : UrlHelper 
{ 
    public MyUrlHelper() {} 
    public MyUrlHelper(RequestContext requestContext) : base(requestContext) {} 
    public MyUrlHelper(RequestContext requestContext, RouteCollection routeCollection) : base(requestContext, routeCollection) { } 

    public override string Content(string contentPath) 
    { 
     // do your own custom implemetation here, 
     // you access original Content() method using base.Content() 
    } 
} 

public abstract class MyWebPage : WebViewPage 
{ 
    protected override void InitializePage() 
    { 
     this._urlHelper = new MyUrlHelper(this.Request.RequestContext, RouteTable.Routes); 
    } 

    private MyUrlHelper _urlHelper; 
    public new MyUrlHelper Url { get { return _urlHelper; } } 
} 

// provide generic version for strongly typed views 
public abstract class MyWebPage<T> : WebViewPage<T> 
{ 
    protected override void InitializePage() 
    { 
     this._urlHelper = new MyUrlHelper(this.Request.RequestContext, RouteTable.Routes); 
    } 

    private MyUrlHelper _urlHelper; 
    public new MyUrlHelper Url { get { return _urlHelper; } } 
} 

그런 다음 ~/Views/Web.Config에서 사용자 정의 MyWebPage 등록은 :

<system.web.webPages.razor> 
    .... 
    <pages pageBaseType="Your.NameSpace.MyWebPage"> 
     .... 
    </pages> 
    </system.web.webPages.razor> 
+0

고마워, 지금 해보도록. –

+0

I 'MyWebPage.Url'를 초기화하는 것을 잊었습니다. ed 버전. – haim770

+0

새로운 Url 속성을 도입해야합니까? 기본 WebViewPage의 Url 속성 값을 설정하는 것으로 충분하다고 생각합니다. –

1

나는 당신의 질문에 직접적인 답변을하지 않습니다하지만 당신은 그냥이 같은 URLHelper 클래스의 확장 만들 수 있습니다 :이 같은 Url 객체에이 방법을

public static class CustomUrlHelper 
{ 
    public static string CustomContent(this UrlHelper helper, string contentPath) 
    { 
     // your Content method 
    } 
} 

을 한 후 바로 전화 :

@Url.CustomContent("~/Content/Site.css") 
+0

이것은 우리의 경우에 작동하지 않을. 솔직히 말해서 나는 '오버라이드'도 도움이 될지 모르겠다. url에 물결표를 사용합니다. 'src = "~ ...."'MVC4는 이러한 URL을 정상으로 변환합니다. 나는 Url을 그렇게 부르면 좋겠다 .Content. –

+0

@voroninp 죄송합니다. "MVC4가 이러한 URL을 정상으로 변환한다고 말하면"~/Content/Site.css "를"/ Content/Sitemss "로 변환하고"~/Content/Site "가되어야 함을 의미합니다. CSS "? – Groyoh

+0

정확하지 않습니다. 나는 Convert가 파일 타임 스탬프를 고려하기를 원한다. 캐시 무효화. 그래서 src = "~ Scripts/my.js"라고 쓸 때 src = "VirtualDirPath/Scripts/my.js?