2013-10-03 106 views

回答

5

你可以翻譯拉姆達:

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) 
+0

當我有一個嵌套的屬性,比如'Foo.Bar [0] .Stick [0] .Checked',那麼生成的html,name屬性必須與內置的CheckBoxFor一樣,名稱='Foo.Bar [0] .Stick [0] .Checked'。你的解決方案,生成名稱屬性爲name ='Checked'。 :-( – Nauman

+0

啊,我的壞,我用'Foo.Bar.First()。Stick.First()。Checked',而不是'Foo.Bar [0] .Stick [0] .Checked'。謝謝! - ) – Nauman

相關問題