带有Generic的Asp.Net HtmlHelper仅在@Razor语句中工作

时间:2014-04-14 00:45:04

标签: asp.net-mvc razor

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

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

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

此Test助手的代码非常简单:

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

错误发生在执行期间:

  

类型&#39; System.Web.HttpCompileException&#39;的例外情况发生在   System.Web.dll但未在用户代码中处理   编译器错误消息:CS1502:最佳重载方法匹配   &#39; System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)&#39;   有一些无效的论点

1 个答案:

答案 0 :(得分:1)

Razor解析器很困惑。它不知道是HTML还是C#。

尝试:

@(Html.Test<ContestListItemViewModel>())

在第二个例子中,语句包含在Razor代码块中,因此它确实知道。

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