【问题标题】:Asp.Net HtmlHelper with a Generic only work inside a @Razor statement带有泛型的 Asp.Net HtmlHelper 只能在 @Razor 语句中工作
【发布时间】:2014-04-14 00:45:04
【问题描述】:

我想了解为什么下面的代码在第二个工作时不起作用:

@Html.Test<ContestListItemViewModel>() //Does not work

@{
    var x = Html.Test<ContestListItemViewModel>();//Work
            @Html.Raw(x);//Work
}

这个Test helper的代码很简单:

    public static MvcHtmlString Test<TEntityType>(this HtmlHelper htmlHelper)
    {
        return new MvcHtmlString("<p>Test</P>");
    }

错误在执行过程中:

“System.Web.HttpCompileException”类型的异常发生在 System.Web.dll 但未在用户代码中处理 编译器错误消息:CS1502:最佳重载方法匹配 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' 有一些无效的参数

【问题讨论】:

    标签: asp.net-mvc razor


    【解决方案1】:

    Razor 解析器很混乱。它不知道那是 HTML 还是 C#。

    试试:

    @(Html.Test<ContestListItemViewModel>())
    

    在第二个示例中,语句被包装在 Razor 代码块中,因此它肯定知道。

    用括号括起来通常可以解决这样的代码混淆问题。

    【讨论】:

    • 谢谢 Rowan,您的解决方案奏效了。这很奇怪,因为如果我创建一个非通用的 Html Helper,这不是必需的。用括号括起来就可以了。
    • 密钥是&lt;ContestListItemViewModel&gt;。它认为它是 HTML。
    猜你喜欢
    • 2012-11-28
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2017-08-24
    • 2016-07-25
    • 1970-01-01
    相关资源
    最近更新 更多