繁体   English   中英

HTML Helper方法未在MVC视图页面中输出结果

[英]Html helper method not outputting results in mvc view page

我的助手看起来像:

public static string OutputBlah( this HtmlHelper helper )
{

 return htmlWriter.InnerWriter.ToString();
}

然后在我的页面中:

<%= MyHelpers.OutputBlah() %>

这应该工作还是我错过了什么? 错误表示没有接受0个争论的重载。

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

您试图通过使用静态方法调用来调用扩展方法。 您可以将代码更改为

<%= MyHelpers.OutputBlah(Html) %>

但是您可能应该更改它以使其像适当的扩展方法一样使用:

<%= Html.OputputBlah() %>

为此,您需要在页面顶部<%@ Import Namespace =“ YourHelperNameSpace”%>。 或将其添加到web.config节点。

类声明是什么样的? 确保您也使类本身成为static

public static class MyHelpers
{
    public static string OutputBlah(this HtmlHelper helper)
    {
        return helper.InnerWriter.ToString();
    }
}

然后在View使用HtmlHelper类型的常规Html属性:

<%= Html.OutputBlah() %>

OP后续问题的答案:

声明这样的方法( static static class static方法,并且第一个参数带有this关键字)时,您将定义一个Extension Method -C#3.0中引入的功能。 基本思想是定义一个挂接到另一个类的方法,从而对其进行扩展

在这种情况下,您要扩展HtmlHelper类(因为this参数的类型),从而使.OutputBlah()HtmlHelper任何实例上都可用。 如果检查ViewPageHtml属性,您会注意到它实际上是HtmlHelper类型。
因此,当您在视图中使用Html.OutputBlah()时,实际上是在访问视图页面的Html属性中包含的HtmlHelper实例,并在其上调用自己的扩展方法。

我认为您需要刷新HTML编写器。 我几乎可以确定是这样。

编辑:请忽略-我未读原始问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM