Asp.net mvc 2 MVC 2文本框,适用于DONS';不要在外面工作

Asp.net mvc 2 MVC 2文本框,适用于DONS';不要在外面工作,asp.net-mvc-2,Asp.net Mvc 2,我想通过编写一个方法来为字段名、输入框和任何验证消息生成HTML,从而从“编辑”视图表单中删除重复的代码。以下是系统生成的默认视图代码示例: <div class="editor-label"> <%: Html.LabelFor(model => model.dateAdded) %> </div> <div class="editor-field"> <%: Html.TextBoxFor(model => m

我想通过编写一个方法来为字段名、输入框和任何验证消息生成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>

现在我知道这不能正常工作,这只是一个开始,但我得到错误“'System.Web.Mvc.HtmlHelper'不包含'TextBoxFor'的定义,并且找不到扩展方法'TextBoxFor'接受'System.Web.Mvc.HtmlHelper'类型的第一个参数”.

您是否正在尝试编写生成此HTML的自定义HTML帮助程序?我建议您使用自定义编辑器模板,因为您拥有的是主标记。因此,您可以拥有以下部分(
~/Views/Shared/EditorTemplates/SomeViewModel.ascx
):


型号(已添加日期)%>
model.dateAdded,String.Format(“{0:g}”,model.dateAdded))%>
型号(已添加日期)%>
然后,每当您对某个ViewModel拥有强类型视图时,只需:

<%= Html.EditorForModel() %>

或者,如果您具有SomeViewModel类型的属性:

<%= Html.EditorFor(x => x.SomePropertyOfTypeSomeViewModel) %>
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);
    }
}
使用System.Web.Mvc;
使用System.Web.Mvc.Html;
公共静态类
{
公共静态MvcHtmlString数据字段(此HtmlHelper HtmlHelper)
{
返回htmlHelper.TextBoxFor(x=>x.dateAdded);
}
}

我会按照你说的方式做。我真的不知道我在做什么,所以很可能我做得完全错了。我怎样才能使它通用化,使它适用于所有模型和字段?目前,“dateAdded”是硬编码的,型号名称也是硬编码的。看起来我还需要传入格式信息。@Dan,您可以这样声明:
public static MvcHtmlString数据字段(这个HtmlHelper HtmlHelper,表达式)
谢谢!我要试一试。
<%= 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);
    }
}