2015-04-24 207 views
1

我想創建一個可以爲類的所有屬性生成隱藏字段的HtmlHelper。從類型lambda表達式獲取所有屬性表達式

在我的剃鬚刀頁,我會調用如下

@Html.HiddenForObject(x=>x.SomeClass) 

其中x將在模型中定義@model SomeOtherClass

我的助手定義爲這樣=>

public static MvcHtmlString HiddenForObject<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, 
      Expression<Func<TModel, TProperty>> expression) 

現在有些班級有幾個公共屬性,我想隱藏字段。 但在這裏我堅持 我需要找到正確的代碼在遍歷所有屬性在我的表情,讓這些屬性的表達,所以我可以叫

//Pseudo code 
foreach(var propertyExpression in expression) { 
@Html.HiddenFor(expression); 
} 

我嘗試了一些東西,但基本上我跑出於想法。 任何幫助,非常感謝。

+0

那麼你可以使用反射,但...它不被視爲「好」 – Ewan

回答

0

您可以在表達式中使用反射

 foreach (var p in stage.GetType().GetProperties()) 
     { 

     } 

但是,有可能會是一個相當大的性能損失,如果你這樣做,再加上它可以打開安全蠕蟲的整體能,特別是如果你使用你的類以訪問數據庫。

你可以擴展的想法,雖然和定義一些屬性,以紀念你的隱藏字段,並使用您的擴展方法挑選出來。

+0

我將標誌着這是正確的答案,但由於對性能的影響,我放棄了這個想法,去另一個形式給出。 – woutervs