私は私が複数のサーバーにいくつかのプロジェクトのためにいくつかの共通のコードにこれを移動しようとしていますしかしので、これはうまく機能し、正しい値MVCを使用せずにDisplayName属性にアクセスできますか?
public static string ToCsv<TModel>(this List<TModel> list, string delimiter, string lineBreak, string valueWrap, params Expression<Func<TModel, object>>[] expressions)
{
var sb = new StringBuilder();
var headers = expressions.Select(m => String.Format("{0}{1}{0}", valueWrap, GetPropertyName(m))).ToArray();
sb.Append(String.Format("{0}{1}", String.Join(delimiter, headers), lineBreak));
foreach (var listItem in list)
{
var values = expressions.Select(m => String.Format("{0}{1}{0}", valueWrap, m.Compile()(listItem))).ToArray();
sb.Append(String.Format("{0}{1}", String.Join(delimiter, values), lineBreak));
}
return sb.ToString();
}
にアクセスするには、ラムダ式を使用して一覧するための一般的なCSVビルダーをリファクタリングしていますアクセス。 System.Web.Mvc
アセンブリを参照できません
DisplayName
属性にアクセスする良い方法はありますか?そうでない場合は、変数名にアクセスしますか?
私の現在の試みは((MemberExpression) expression.Body).Member.Name
にアクセスしますが、値を文字列に変換する必要がある場合は機能しません。
内部クラスでは動作しませんでした属性を反復処理の第二の試みを(つまりはint型を渡すと、暗黙的に変換する)(すなわちmodel
=>はmodel.innerClass.property
)カップルシンプルなヘルパー関数で
詳細情報:解決策がないと、私は先に進み、 'System.Web.Mvc.ExpressionHelper'を使用しましたが、別の問題が発生しました。 HtmlHelperとViewDataがなければ、プロパティのDisplayName属性は取得されません。何か案は? –