3

ヘルパー入力パラメーターに基づいてコントロールをレンダリングするカスタム HtmlHelper 拡張機能があります。

私は、CheckBox 以外の任意のコントロールをレンダリングできる状況にあります。CheckBoxFor ヘルパーが受け入れるように、Expression<Func<TModel, bool>>

タイトルにあるように、Func の return-type を bool に変換する方法が必要です。

4

1 に答える 1

6

ラムダを翻訳できます:

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)
于 2013-10-03T11:37:51.000 に答える