在自定义帮助程序中使用id的模型方法名称

时间:2013-06-20 17:53:33

标签: c# asp.net-mvc-4 razor-2

我有以下帮助器,所以我可以有一个日期选择器字段:

public static MvcHtmlString DatePickerFor<TModel>(this HtmlHelper<TModel> helper, Expression<Func<TModel, object>> property, string minDate = "2012-01-01", string maxDate = "2100-01-01")
    {
        TModel model = helper.ViewData.Model;
        var builder = new TagBuilder("input");
        builder.Attributes.Add("id", "id");
        builder.Attributes.Add("type", "date");
        return MvcHtmlString.Create(builder.ToString());

    }

我想要做的是从我从我的视图传递给它的模型方法生成ID和名称,就像你可以使用任何其他EditorFor或RadioButtonFor字段一样。

在视图中我这样称呼它:

@Html.DatePickerFor(model => model.EntryDate)

因此,在这种情况下,我希望ID和名称为“EntryDate”。我尝试查看helper.ViewData和其他元数据,但找不到任何可以使用的内容。术语“模型方法名称”可能有误,所以请随时纠正我。

1 个答案:

答案 0 :(得分:0)

您可能需要使用像this SO answer这样的表达式代码来将属性名称作为字符串。

这里是关键位,其中action是你的lambda model => model.EntryDate

var expression = (MemberExpression)action.Body;
string name = expression.Member.Name;