如何编写自定义ASP.NET MVC HTML Helper,如Html.TextBoxFor并设置正确的name属性

时间:2012-12-21 17:02:37

标签: c# asp.net-mvc

我想要自定义Html.DateTimePickerFor(a => a.Fields[0].Id, value)

所以结果应该是这样的:

<div name="Fields[0].Id"></div>

目前我使用Html.DatetimePicker("Fields[0].Id", value)并且它完美无缺,但我想生成动态名称。

所以问题是如何设置正确的"name"属性?

2 个答案:

答案 0 :(得分:4)

试试这个。它对我有用。

    public static MvcHtmlString DateTimePickerFor<TModel, TProp>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProp>> expression, object htmlAttributes)
    {
        string name   = ExpressionHelper.GetExpressionText(expression);
        ... rest of code here
    }

魔力来自System.Web.Mvc.ExpressionHelper.GetExpressionText()。从表达式中获得名称后,即可将其应用于div。

GetExpressionText()

答案 1 :(得分:2)

尝试这样的事情(改编自工作代码):

public static IHtmlString DateTimePickerFor<TModel, TValue>(
    this HtmlHelper<TModel> helper,
    Expression<Func<TModel, TValue>> expression,

    // other input parameters as needed

) {
    // metadata gives you access to a variety of useful things, such as the
    // display name and required status
    var metadata = ModelMetadata.FromLambdaExpression( expression, helper.ViewData );
    string markup = ""; // markup for your input            

    var name = helper.NameFor( expression ); // getting the name

    return MvcHtmlString.Create( markup  );
}