2

我已经覆盖了UrlHelper.Content()方法。现在我希望使用我的实现而不是默认UrlHelper类。

如何配置 MVC 来告诉它哪个类注入到WebViewPage.Url属性中?

更新 1:
这个想法很简单。捆绑包通过向 url 添加时间戳查询参数来支持缓存破坏。
我希望单个资源具有相同的功能。
UrlHelper类允许覆盖其Content(string)方法。因此,在生成最终字符串时可以考虑资源的时间戳。

更新 2:
看来我的前提是错误的。我认为 src="~..." 等同于 src="@Url.Content("~...")"。事实并非如此。

4

2 回答 2

2

您将需要介绍自己的WebViewPage,它提供自己的实现,UrlHelper该实现将覆盖该Content()方法。

首先,创建类型:

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; } }
}

MyWebPage然后在以下位置注册您的自定义~/Views/Web.Config

  <system.web.webPages.razor>
    ....
    <pages pageBaseType="Your.NameSpace.MyWebPage">
         ....
    </pages>
  </system.web.webPages.razor>
于 2014-10-29T09:57:38.250 回答
1

我没有直接回答您的问题,但您可以像这样创建 URLHelper 类的扩展:

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

然后Url像这样在对象上调用这个方法:

@Url.CustomContent("~/Content/Site.css")
于 2014-10-29T09:52:24.553 回答