2011-11-18 64 views
1

我很困惑哪个是哪个。有人能解释两者之间的区别吗?这是MVC3中的扩展或帮助器方法吗?

例如下面是哪个返回MvcHtmlString的扩展或帮助器方法?

public static class LinkExtensions 
{ 
    public static MvcHtmlString HdrLinks(
     this HtmlHelper helper, 
     string topLink, 
     string subLink, 
     System.Security.Principal.IPrincipal user) 
    { 
    etc ... 

如何:

public static class Slug 
{ 
    public static string Generate(string phrase, int maxLength = 50) 
    { 
     string str = RemoveAccent(phrase).ToLower(); 
     str = Regex.Replace(str, @"[^a-z0-9\s-]", " "); 
     str = Regex.Replace(str, @"[\s-]+", " ").Trim(); 
     str = str.Substring(0, str.Length <= maxLength ? str.Length : maxLength).Trim(); 
     str = Regex.Replace(str, @"\s", "-"); 
     return str; 
    } 
+0

我不知道MVC的“助手”方法,但“助手”并不意味着任何从面向对象或架构的角度来看,并且是一个糟糕的命名约定。尽可能避免使用它,但可以随意使用现有库/使用该错误名称的代码。如果MVC正在生成称为“助手”的方法,不要试图纠正它 - 只是不要堆积在现有糟糕的命名之上。例如,MS添加到“IEnumerable”类型的扩展方法称为“Linq”,而不是“EnumerableHelper”。 –

回答

4

他们不是辅助方法,他们被称为HTML helpers.There是在C#中没有 '帮手法' 的实施。 HTML助手被实现为扩展方法。你可以看到扩展方法是在第一个参数之前有一个this子句的静态方法。 HTML帮助程序可以更轻松地生成HTML标记。

+0

那么在一个典型的MVC配置中,它们会被存储在/ Helpers目录还是/ ExtensionMethods?为了清晰起见,我应该将它们放在不同目录中吗 –

+0

那些与MVC一起在System.Web.Mvc.Html命名空间。您可以将自定义助手存储在任何你想要的地方。 –

+3

您可能需要考虑在您的web.config中注册声明扩展方法代码(上面的'LinkExtensions')的名称空间。在web.config文件中,你可以在你的''部分添加这样的行:''。否则,如果视图代码中没有@using或@import,您将无法使用助手扩展方法。 –

0
public static MvcHtmlString HdrLinks(this HtmlHelper helper, string topLink) 

既是C#扩展方法和ASP.NET MCV视图中使用的HTML辅助方法:

//Example of a call as an extension method: 

var helper = new HtmlHelper(...); 
var result = helper.HdrLinks(topLink); 

//Example of a call as a helper method in an MVC razor view: 
@Html.HdrLinks(topLink) 

下面是一个 “标准” 静态C#方法:

public static class Slug { 
    public static string Generate(string phrase, int maxLength = 50) 
} 

//Example of call: 

var phrase = "Freech Alpes are the surfer's best spot" 
var result = Slug.Generate(phrase); 

静态方法在没有类实例的情况下被调用。它是一个特殊的虚拟构造来分组函数。