使用Model Lambda在MVC5中自定义HTML帮助程序

时间:2014-10-30 18:26:39

标签: c# asp.net asp.net-mvc lambda html-helper

我正在尝试创建一个自定义HTML帮助程序,这将导致HTML编辑器出现在MVC应用程序中。  我一直按照http://dan.cx/2012/05/custom-strongly-typed-htmlhelpers-in-asp-net-mvc的说明进行操作。我无法让它发挥作用而且完全卡住了。

这是我创建的HtmlHelper .....

public static class HTMLEditor
{


    public static HtmlString RenderFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, int? width = 810, int? height = 200)
    {
        var name = html
                    .ViewContext
                    .ViewData
                    .TemplateInfo
                    .GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression));
        var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);

        string myEditor = "<textarea id='" + name + "' ";
        myEditor += "class='textarea' placeholder='' style='width: " + width + "px !important; height: " + height + "px !important'></textarea>";
        myEditor += "<script>$('#" + name + "').wysihtml5({'html':true,'color': false,parser: function(html) {return html;}});";
        myEditor += "editor.on('load', function() {editor.focus();editor.composer.commands.exec('insertHTML', '" + metadata.Model + "');})";
        myEditor += "</script>";
        return new HtmlString(myEditor);
    }
}

然后,在我的Razor视图中,我试图使用这样的帮助器......

@HTMLEditor.RenderFor(model => model.PageDetail.HTML)

但是,所有内容都可以正常编译,但是当需要将视图呈现给浏览器时,我收到错误:

  

编译错误

     

描述:编译服务此请求所需的资源时发生错误。请查看以下特定错误详细信息并相应地修改源代码。

     

编译器错误消息:CS1501:方法'RenderFor'没有重载需要1个参数

我不确定问题出在哪里。我确实看到RenderFor方法有两个参数,但我不确定如何传递一个模型实例值,并在回发后保留在模型实例中的值。

非常感谢任何帮助。

由于 马特

1 个答案:

答案 0 :(得分:7)

在我看来,你正在调用.Render For对错误的对象。

您的RenderFor方法是HtmlHelper的扩展方法。因此,您应该从视图中调用@ Html.RenderFor(model =&gt; ...)。