Html帮助方法没有在mvc视图页面中输出结果

时间:2009-10-01 20:42:43

标签: c# asp.net-mvc

我的助手看起来像:

public static string OutputBlah( this HtmlHelper helper )
{

 return htmlWriter.InnerWriter.ToString();
}

然后在我的视图中:

<%= MyHelpers.OutputBlah() %>

这应该有效还是我错过了什么? 错误表示没有超载接受0争论。

我应该在视图中传递给我的方法?

3 个答案:

答案 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}的任何实例}}。如果您检查HtmlViewPage属性,您会发现它实际上属于HtmlHelper类型。
因此,当您在视图中使用HtmlHelper时,您实际上正在访问视图页面Html.OutputBlah()属性中包含的HtmlHelper实例,并在其上调用您自己的扩展方法。

答案 2 :(得分:0)

我认为你需要刷新HTML编写器。我几乎可以肯定这就是它。

编辑:请忽略 - 我想念原来的问题。