Asp.net mvc MVC5 HTMLHelper扩展未返回预期内容

Asp.net mvc MVC5 HTMLHelper扩展未返回预期内容,asp.net-mvc,html-helper,Asp.net Mvc,Html Helper,我希望扩展“Html.TextBoxFor”扩展以满足一些特定的客户需求 作为一个健全性检查,我从simple开始,只是创建了一个测试扩展方法,它将简单地委托给现有的功能: public static class HtmlExtensions { public static MvcHtmlString Test<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<

我希望扩展“Html.TextBoxFor”扩展以满足一些特定的客户需求

作为一个健全性检查,我从simple开始,只是创建了一个测试扩展方法,它将简单地委托给现有的功能:

public static class HtmlExtensions
{
    public static MvcHtmlString Test<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
    {
        return htmlHelper.TextBoxFor(expression);
    }
}
当我调用内置TextBoxFor函数时,我得到了所有预期的标记,即:

@Html.TextBoxFor(e=>e.MaxLength10)


当我调用我的分机时,我希望得到相同的内容,但我得到的却是:

@Html.Test(e=>e.MaxLength10)



所有漂亮的数据注释标签怎么了?

我有一个类似的扩展方法,可以创建一个正常工作的水印文本框。试一试,看看它是否解决了您的问题。还可以查看ModelMetadata实例,看看它是否被正确创建

public static MvcHtmlString WatermarkTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes = null)
{
    ModelMetadata metadata = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, htmlHelper.ViewData);
    string watermark = !String.IsNullOrEmpty(metadata.Watermark) ? metadata.Watermark : metadata.DisplayName;
    var attributes = htmlHelper.MergeAttributes(htmlAttributes, new { placeholder = watermark });

    return htmlHelper.TextBoxFor<TModel, TProperty>(expression, attributes);
}
public static MvcHtmlString WatermarkTextBoxFor(此HtmlHelper HtmlHelper,表达式表达式,对象htmlAttributes=null)
{
ModelMetadata元数据=ModelMetadata.FromLambdaExpression(表达式,htmlHelper.ViewData);
字符串水印=!string.IsNullOrEmpty(metadata.watermark)?metadata.watermark:metadata.DisplayName;
var attributes=htmlHelper.MergeAttributes(htmlAttributes,new{placeholder=watermark});
返回htmlHelper.TextBoxFor(表达式、属性);
}
<input data-val="true" data-val-length="The field Max Length 10 must be a string with a maximum length of 10." data-val-length-max="10" data-val-required="The Max Length 10 field is required." id="MaxLength10" name="MaxLength10" type="text" value="">
<input id="MaxLength10" name="MaxLength10" type="text" value="">
public static MvcHtmlString WatermarkTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes = null)
{
    ModelMetadata metadata = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, htmlHelper.ViewData);
    string watermark = !String.IsNullOrEmpty(metadata.Watermark) ? metadata.Watermark : metadata.DisplayName;
    var attributes = htmlHelper.MergeAttributes(htmlAttributes, new { placeholder = watermark });

    return htmlHelper.TextBoxFor<TModel, TProperty>(expression, attributes);
}