基本上,我想要一个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>
唯一的问题是我似乎无法访问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>
}
我也尝试了扩展方法语法:
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();
}
在上述两次尝试中,LabelFor,EditorFor和ValidationMessageFor抛出编译错误(“无法找到”)。
有人知道这样做的方法吗?提前谢谢!
答案 0 :(得分:7)
如果您使用System.Web.Mvc.Html命名空间的命名空间,它应该可以工作。扩展方法在此命名空间中的各种静态扩展类(例如EditorExtensions)中定义。