ASP.NET MVC 3 で WebGrid html ヘルパーを使用して、ModelMetadata にある情報に従って列を自動生成しようとしています。たとえば、オブジェクトのリストを受け入れるビューのコードは次のようになります。
var grid = new WebGrid(Model);
@grid.GetHtml(columns: ViewData.ModelMetadata.Properties.Single.Properties
.Select(p => grid.Column(
columnName: p.PropertyName,
header: p.ShortDisplayName
)));
これは実際に魔法のように機能します (実際にはそれほど簡単であることに驚きました)。ここで起こることは、モデルのプロパティから、ShortDisplayName を列のヘッダーとして使用することです。
問題?すべての列にデフォルトのフォーマットを適用する必要があります。基本的に、グリッドが表示するすべてのデータに Html.Raw 拡張子を使用したいと考えています。試行は次のようになります。
var grid = new WebGrid(Model);
@grid.GetHtml(columns: ViewData.ModelMetadata.Properties.Single.Properties
.Select(p => grid.Column(
columnName: p.PropertyName,
header: p.ShortDisplayName,
format: (item) => Html.Raw(GetPropertyValue(item, p.PropertyName))
)));
メソッド GetPropertyValue は、リフレクションなどを使用してプロパティの値を読み取ります (アイテムは動的であり、その値は実際には現在の行に表示されているオブジェクトであることをここで思い出してください)。
これを行うより良い方法はありますか?
ありがとう、
コスタス