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
调用应该不是很困难。这只是一些查找/替换。