如何在自定义Html Helper中使用Html.EditorFor()(和其他人)?

jri*_*zzo 9 asp.net-mvc-3

基本上,我想要一个Html助手(类似的东西@Html.MyEditor(m => m.Property))来产生这个:

<div class="editor-label">
    @html.LabelFor(m => m.Property)
</div>
<div class="editor-field">
    @html.EditorFor(m => m.Property)
    @html.ValidationMessageFor(m => m.Property)
</div>
Run Code Online (Sandbox Code Playgroud)

唯一的问题是我似乎无法访问Html.EditorFor()我自己的帮助器中的任何其他扩展方法.示例尝试:

@helper Edit(this System.Web.Mvc.HtmlHelper<Spartacus.ViewModels.NewTaskItemModel> html)
{
    <div class="editor-label">
        @html.LabelFor(m => m.Property)
    </div>
    <div class="editor-field">
        @html.EditorFor(m => m.Property)
        @html.ValidationMessageFor(m => m.Property)
    </div>
}
Run Code Online (Sandbox Code Playgroud)

我也尝试了扩展方法语法:

public static string DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression)
{
    var sb = new StringBuilder();
    sb.AppendLine("<div class=\"editor-label\">");
    sb.AppendLine(html.LabelFor(expression));
    sb.AppendLine("</div>");
    sb.AppendLine("<div class=\"editor-field\">");
    sb.AppendLine(html.EditorFor(expression));
    sb.AppendLine(html.ValidationMessageFor(expression));
    sb.AppendLine("</div>");
    return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)

在上述两次尝试中,LabelFor,EditorFor和ValidationMessageFor抛出编译错误("无法找到").

有人知道这样做的方法吗?提前致谢!

Tz_*_*Tz_ 7

如果您具有用于System.Web.Mvc.Html命名空间的命名空间,它应该可以工作.扩展方法在此命名空间中的各种静态扩展类(例如EditorExtensions)中定义.