我想通过编写一个方法来为我的“编辑”视图表单中删除重复的代码,以生成字段名称,输入框和任何验证消息的HTML。以下是系统生成的默认视图代码示例:
<div class="editor-label">
<%: Html.LabelFor(model => model.dateAdded) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.dateAdded, String.Format("{0:g}", Model.dateAdded)) %>
<%: Html.ValidationMessageFor(model => model.dateAdded) %>
</div>
以下是我开始写的内容:
MvcHtmlString DataField(HtmlHelper h, Object m)
{
string s=h.TextBoxFor(m => m.dateAdded);
}
现在我知道它将无法正常工作,它只是一个开始,但我收到错误“'System.Web.Mvc.HtmlHelper'不包含'TextBoxFor'的定义,也没有扩展方法'TextBoxFor'接受可以找到“System.Web.Mvc.HtmlHelper”类型的第一个参数“。
答案 0 :(得分:1)
您是否正在尝试编写可生成此HTML的自定义HTML帮助程序?我建议您使用自定义编辑器模板,因为您拥有的是主要标记。所以你可以有以下部分(~/Views/Shared/EditorTemplates/SomeViewModel.ascx
):
<%@ Control
Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<AppName.Models.SomeViewModel>" %>
<div class="editor-label">
<%: Html.LabelFor(model => model.dateAdded) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.dateAdded, String.Format("{0:g}", Model.dateAdded)) %>
<%: Html.ValidationMessageFor(model => model.dateAdded) %>
</div>
然后只要你有一个强类型的SomeViewModel视图:
<%= Html.EditorForModel() %>
或者如果您有SomeViewModel类型的属性:
<%= Html.EditorFor(x => x.SomePropertyOfTypeSomeViewModel) %>
将呈现自定义编辑器模板。
就助手而言,正确的签名是:
using System.Web.Mvc;
using System.Web.Mvc.Html;
public static class HtmlExtensions
{
public static MvcHtmlString DataField(this HtmlHelper<SomeViewModel> htmlHelper)
{
return htmlHelper.TextBoxFor(x => x.dateAdded);
}
}