2010-07-14 48 views
1
public Jquery Extra(this HtmlHelper htmlhelper, 
        string message, 
        IDictionary<string, object> htmlAttributes) 

如果我声明这个Htmlhelper htmlhelper当我声明我的方法,但我不想在我调用该方法时传递该参数?声明参数,我不想通过

我是决策意识

+0

您是否知道扩展方法和'this'-keyword?这很难理解你实际上想要做什么 – sloth 2010-07-14 13:50:58

回答

6

我相信你正在试着编写一个Extension Method。你定义它像这样

namespace ExtensionMethods 
{ 
    public static class MyExtensions 
    { 
     public static Jquery Extra(this HtmlHelper htmlhelper, string message, IDictionary htmlAttributes) 
     { 
      //do work 
      return Jquery; 
     } 
    } 
} 

,然后用它是这样的:

HtmlHelper helper = new HtmlHelper(); 
Jquery jq = helper.Extra(message, htmlAttributes); 
+0

我想你已经明白了。 – SLaks 2010-07-14 13:31:02

+0

这不会工作HtmlHelper helper = new HtmlHelper(); 因为HtmlHelper没有构造函数。 – 2010-07-14 13:32:36

+1

Brian的代码仅仅是一个例子,用于证明您需要一个HtmlHelper变量来调用您的Extra扩展方法。重点在于语法必须是这样的:'<你的HtmlHelper实例> .Extra(message,htmlAttributes);'你可能会在视图中调用这个方法,在这种情况下,你已经可以访问HtmlHelper实例(视图的Html属性),并且不需要创建它的新实例。你应该可以像'<%= Html.Extra(message,htmlAttributes)%>'或'<%JQuery jq = Html.Extra(message,htmlAttributes); %>' – 2010-07-14 14:28:24

1

编辑:这听起来像你希望能够在所有调用这个方法没有任何HtmlHelper对象。

如果方法需要HtmlHelper,您将无法在没有该方法的情况下调用它。
您应该重写该方法,以便它不需要HtmlHelper


你可以用较少的参数过载:

public static Jquery Extra(this HtmlHelper htmlhelper, string message) { 
    return htmlHelper.Extra(message, null); 
} 

在C#4,你也可以使用一个可选的参数:

public Jquery Extra(this HtmlHelper htmlhelper, string message, IDictionary<string, object> htmlAttributes = null) { 

我强烈建议您还增加了一个需要匿名类型的过载:

public static Jquery Extra(this HtmlHelper htmlhelper, string message, object htmlAttributes) { 
    return htmlHelper.Extra(message, null, new RouteValueDictionary(htmlAttributes)); 
} 
+0

但是我需要在我的方法中使用html助手,并且我不能创建它的新实例 – 2010-07-14 13:17:56

+0

咦?你什么意思? – SLaks 2010-07-14 13:18:44

+0

我需要调用我的Extra方法而不传递第一个参数。但我不想通过htmlhelper而不是htmlattribuites。 所以,如果我创建一个超载我不会能够使用htmlhelper变量,我想分配一个值。 – 2010-07-14 13:23:33

0

谁是这个函数的作者?如果是你,那么不包含第一个参数。 public Jquery Extra(string message, IDictionary<string, object> htmlAttributes)
如果它是你自己没有编写的代码,那么HtmlHelper变量可能是必要的,你应该不要试图从函数原型中删除它。
您的评论之一表示您无法初始化HtmlHelper,这在技术上并非如此。请参阅[msdn参考]。 1

+0

这是我的代码....我需要包括我需要在我的方法中使用它的HTML帮助.. 嗯,我的意思是你不能创建一个实例,他写它的方式。 – 2010-07-14 14:43:25