DropDownListFor <tmodel,tproperty>获取另一个参数的方法</tmodel,tproperty>

时间:2015-02-25 08:45:37

标签: c# asp.net asp.net-mvc generics expression

在这里我使用Enum绑定下拉列表。(绑定成功)。但是我想为它添加css类,但是在这里它需要添加,
&#34; DropDownListFor&#34;&lt;&#34; TModel,TProperty&#34;&gt;&#34;为css类名取另一个参数的方法。&#34;

我的下拉列表

 @Html.DropDownListFor(m => m.ReportType)

但我需要在MyDropdownlist方法中接受以下内容,

 @Html.DropDownListFor(m => m.ReportType, new {@class="form-control"})

帮助程序类(下拉列表方法)

        public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
        Expression<Func<TModel, TProperty>> expression) 
        where TModel : class
    {
        TProperty value = htmlHelper.ViewData.Model == null 
            ? default(TProperty) 
            : expression.Compile()(htmlHelper.ViewData.Model);
        string selected = value == null ? String.Empty : value.ToString();
        return htmlHelper.DropDownListFor(expression, createSelectList(expression.ReturnType, selected));
    }

我从This Link获得此内容。在该文章的评论部分,有人要求提出完全相同的问题。

1 个答案:

答案 0 :(得分:0)

我认为您需要将参数添加为object htmlAttributes并使用htmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)创建下拉列表。

您的完整帮助程序代码将变为:

public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression, object htmlAttributes ) 
    where TModel : class
    {
    TProperty value = htmlHelper.ViewData.Model == null 
        ? default(TProperty) 
        : expression.Compile()(htmlHelper.ViewData.Model);
    string selected = value == null ? String.Empty : value.ToString();
    return htmlHelper.DropDownListFor(expression, createSelectList(expression.ReturnType, selected), null, htmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
}

我发现在像您这样的情况下,最好的解决方案是查看实际源代码对SelectExtensions的影响。

<强> Html.DropDownListFor source code reference