MVC 2 TextBoxFor在视图外不起作用

时间:2011-03-07 09:22:12

标签: asp.net-mvc-2

我想通过编写一个方法来为我的“编辑”视图表单中删除重复的代码,以生成字段名称,输入框和任何验证消息的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”类型的第一个参数“。

1 个答案:

答案 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);
    }
}