转换表达式<func <tmodel,tvalue =“”>&gt;表达式<func <tmodel,bool =“”>&gt; </func <tmodel,> </func <tmodel,>

时间:2013-10-03 08:10:30

标签: asp.net-mvc-4 lambda html-helper

我有一个自定义的HtmlHelper扩展,它根据辅助输入参数呈现控件。

我处于这种情况,我可以渲染任何控件,除了CheckBox。当CheckBoxFor助手接受Expression<Func<TModel, bool>>

我需要一种方法将Func的返回类型转换为bool,如标题中所述。

1 个答案:

答案 0 :(得分:6)

你可以翻译lambda:

public static class HtmlExtensions
{
    public static IHtmlString MyHelper<TModel, TProperty>(
        this HtmlHelper<TModel> html, 
        Expression<Func<TModel, TProperty>> ex
    )
    {
        if (typeof(TProperty) != typeof(bool))
        {
            throw new InvalidOperationException("You can only generate checkboxes with boolean properties on your view model");
        }

        var boolExpression = Expression.Lambda<Func<TModel, bool>>(ex.Body, ex.Parameters);

        return html.CheckBoxFor(boolExpression);
    }
}

现在您可以在模型的布尔属性上使用帮助器:

@Html.MyHelper(x => x.SomeBooleanProperty)