C# 如何覆盖Url.Action

C# 如何覆盖Url.Action,c#,asp.net-mvc,asp.net-mvc-3,extension-methods,C#,Asp.net Mvc,Asp.net Mvc 3,Extension Methods,现在我使用覆盖扩展,如: public abstract class MyWebViewPage<T> : WebViewPage<T> { public new MyHtmlHelper<T> Html { get; set; } public override void InitHelpers() { Ajax = new AjaxHelper<T>(ViewContext, this);

现在我使用覆盖扩展,如:

public abstract class MyWebViewPage<T> : WebViewPage<T>
{
    public new MyHtmlHelper<T> Html { get; set; }
    public override void InitHelpers()
    {
        Ajax = new AjaxHelper<T>(ViewContext, this);
        Url = new UrlHelper(ViewContext.RequestContext);
        Html = new MyHtmlHelper<T>(ViewContext, this);
    }
}

public class MyHtmlHelper<T> : HtmlHelper<T>
{
    public MyHtmlHelper(ViewContext viewContext, IViewDataContainer viewDataContainer) :
        base(viewContext, viewDataContainer)
    {
    }

    public MvcHtmlString ActionLink(string linkText, string actionName)
    {
        return ActionLink(linkText, actionName, null, new RouteValueDictionary(), new RouteValueDictionary());
    } 
}
公共抽象类MyWebViewPage:WebViewPage { 公共新MyHtmlHelperHTML{get;set;} 公共重写void InitHelpers() { Ajax=新的AjaxHelper(ViewContext,this); Url=新的UrlHelper(ViewContext.RequestContext); Html=新的MyHtmlHelper(ViewContext,this); } } 公共类MyHtmlHelper:HtmlHelper { 公共MyHtmlHelper(ViewContext ViewContext,IViewDataContainer viewDataContainer): 基本(viewContext、viewDataContainer) { } public MvcHtmlString ActionLink(string linkText,string actionName) { 返回ActionLink(linkText,actionName,null,new RouteValueDictionary(),new RouteValueDictionary()); } } 如何将
Url.Action
helper添加到所有重载版本


UPD:我应该覆盖所有标准方法,因为许多人都在使用这个方法,我认为他们应该使用标准帮助器,但使用我的功能

你不需要覆盖
Url.Action
帮助器或
HtmlHelper
操作。您可以改为创建。下面是一个例子:

public static class MyHelpers
{
    public static string MyAction(this UrlHelper url, string actionName)
    {
        // return whatever you want (here's an example)...
        return url.Action(actionName, new RouteValueDictionary());
    }
}
然后,您可以在视图中使用该方法,如下所示:

@Url.MyAction("MyActionName")
更新:

我不建议重写
Url.Action
方法。创建扩展方法更简单、更干净。但是,你可以这样做:

public class MyUrlHelper : UrlHelper 
{
    public override string Action(string actionName)
    {
        return base.Action(actionName, new RouteValueDictionary());  
    }
}

我应该覆盖所有的标准方法,因为很多人都在做这件事,我认为他们应该使用标准的助手,但我的功能不是一个好主意。事实上,许多人将使用这些方法,这不是一个很好的理由。但是,无论如何,请检查我的更新答案。@PeteFox,为什么要创建一个新类来覆盖一个方法?扩展类用于此目的。重命名视图中现有的
Url.Action
调用应该不是很困难。这只是一些查找/替换。