Asp.net mvc 3 如何在自定义Html帮助程序中使用Html.EditorFor()(和其他)?

Asp.net mvc 3 如何在自定义Html帮助程序中使用Html.EditorFor()(和其他)?,asp.net-mvc-3,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 =

基本上,我需要一个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>
我还尝试了扩展方法语法:

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();
}
publicstaticstringdatepickerfor(此HTMLHelperHTML,表达式)
{
var sb=新的StringBuilder();
某人加上一行(“”);
sb.AppendLine(html.LabelFor(表达式));
某人加上一行(“”);
某人加上一行(“”);
sb.AppendLine(html.EditorFor(expression));
sb.AppendLine(html.ValidationMessageFor(expression));
某人加上一行(“”);
使某人返回字符串();
}
在上述两次尝试中,LabelFor、EditorFor和ValidationMessageFor都会抛出编译错误(“找不到”)


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

如果您有一个用于System.Web.Mvc.Html名称空间的名称空间,那么它应该可以工作。扩展方法在这个名称空间中定义在各种静态扩展类(例如EditorExtensions)上。

也许我没有理解问题背后的诀窍,但是在第二种情况下(因为这是纯C#,对吧?),如果您有一个名称空间用于System.Web.Mvc.Html名称空间,它应该如何工作呢。扩展方法在此命名空间中定义在各种静态扩展类(例如EditorExtensions)上。@Tz_u就是这样!我有
System.Web.Mvc
,但没有
System.Web.Mvc.Html
。奇怪的是,VS2010没有告诉我这是我所需要的名称空间——它通常会选择这个名称空间,并为using语句提供自动更正,所以我认为还有其他错误。如果你想添加一个答案而不是评论,我会相信你的答案是正确的。
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();
}