2
我有一個自定義HtmlHelper擴展,它根據輔助輸入參數呈現控件。將表達式<Func <TModel,TValue >>轉換爲表達式<Func <TModel,bool >>
我在一種情況,在那裏,我能夠呈現任何控件,除了CheckBox。由於CheckBoxFor幫手接受,Expression<Func<TModel, bool>>
我需要一種方法來將Func的返回類型轉換爲布爾,如標題中所述。
我有一個自定義HtmlHelper擴展,它根據輔助輸入參數呈現控件。將表達式<Func <TModel,TValue >>轉換爲表達式<Func <TModel,bool >>
我在一種情況,在那裏,我能夠呈現任何控件,除了CheckBox。由於CheckBoxFor幫手接受,Expression<Func<TModel, bool>>
我需要一種方法來將Func的返回類型轉換爲布爾,如標題中所述。
你可以翻譯拉姆達:
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)
當我有一個嵌套的屬性,比如'Foo.Bar [0] .Stick [0] .Checked',那麼生成的html,name屬性必須與內置的CheckBoxFor一樣,名稱='Foo.Bar [0] .Stick [0] .Checked'。你的解決方案,生成名稱屬性爲name ='Checked'。 :-( – Nauman
啊,我的壞,我用'Foo.Bar.First()。Stick.First()。Checked',而不是'Foo.Bar [0] .Stick [0] .Checked'。謝謝! - ) – Nauman