【问题标题】:How can i override Url.Action我如何覆盖 Url.Action
【发布时间】:2015-02-09 18:45:00
【问题描述】:

现在我用来覆盖扩展,例如:

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

所有重载版本如何在此处添加Url.Action helper?

UPD:我应该覆盖所有标准方法,因为很多人都在研究这个,我他们应该使用标准助手,但使用我的功能

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 extension-methods


    【解决方案1】:

    您不需要覆盖 Url.Action 助手和 HtmlHelper 操作。您可以改为创建 Extension Methods。这是一个例子:

    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 调用应该不是很困难。这只是一些查找/替换。
    猜你喜欢
    • 2021-01-03
    • 2019-02-26
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    相关资源
    最近更新 更多