我的助手看起来像:
public static string OutputBlah( this HtmlHelper helper )
{
return htmlWriter.InnerWriter.ToString();
}
然后在我的视图中:
<%= MyHelpers.OutputBlah() %>
这应该有效还是我错过了什么? 错误表示没有超载接受0争论。
我应该在视图中传递给我的方法?
答案 0 :(得分:4)
您正尝试使用静态方法调用来调用扩展方法。您可以将代码更改为
<%= MyHelpers.OutputBlah(Html) %>
但是你应该改变它以使用它像一个适当的扩展方法:
<%= Html.OputputBlah() %>
为此,您需要&lt;%@ Import Namespace =“YourHelperNameSpace”%&gt;在页面顶部。或者将其添加到web.config节点。
答案 1 :(得分:0)
班级宣言是什么样的?确保您自己也创建了类static
:
public static class MyHelpers
{
public static string OutputBlah(this HtmlHelper helper)
{
return helper.InnerWriter.ToString();
}
}
然后在Html
中使用HtmlHelper
类型的常规View
属性:
<%= Html.OutputBlah() %>
回答OP的后续问题:
在声明这样的方法时(static
中的static class
方法,以及带有this
关键字的第一个参数),您可以定义Extension Method - 一个功能是在C#3.0中引入的。基本思想是你定义一个挂钩到另一个类的方法,因此扩展它。
在这种情况下,您将扩展HtmlHelper
类(因为this
参数的类型),从而使.OutputBlah()
可用于{{1}的任何实例}}。如果您检查Html
的ViewPage
属性,您会发现它实际上属于HtmlHelper
类型。
因此,当您在视图中使用HtmlHelper
时,您实际上正在访问视图页面Html.OutputBlah()
属性中包含的HtmlHelper
实例,并在其上调用您自己的扩展方法。
答案 2 :(得分:0)
我认为你需要刷新HTML编写器。我几乎可以肯定这就是它。
编辑:请忽略 - 我想念原来的问题。