リストが空であり、空のリストで表示名を取得しているタイプのインスタンスにアクセスできないためです。結果として、参照している特定のプロパティへの型付きのアクセスが失われます。あなたはあなたが当然のモデルタイプを受け入れる拡張メソッドを書くことができ
<th>@Html.DisplayFor(f => f....,
/*
how do you get the property you want to
access here if the list is empty
*/
)</th>
オブジェクトへのアクセス権を持っていない場合の表示名を使用するプロパティを知っているだろうか。例えば
が、その型付きのアクセスが失われます。
public static IHtmlString DisplayType(this HtmlHelper html, Type modelType, string propertyName) {
object modelInstance = Activator.CreateInstance(modelType);
var data = ModelMetadata.FromStringExpression(propertyName,
new ViewDataDictionary(modelInstance));
return new HtmlString(data.DisplayName ?? propertyName);
}
@Html.DisplayType(typeof(CoolModel), "Name")
私は実際にはお勧めしませんが、
小さなアップデート - あなたはまた、入力されたアクセスせずにも、まだモデル経由でアクセスすることができました:
public static IHtmlString DisplayType<TModel, TValue>(this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression,
string propertyName) where TModel : IEnumerable {
object modelInstance =
Activator.CreateInstance(expression.Body.Type.GetGenericArguments()[0]);
var data = ModelMetadata.FromStringExpression(propertyName,
new ViewDataDictionary(modelInstance));
return new HtmlString(data.DisplayName ?? propertyName);
}
リストテンプレートは、自動的に '追加View'ダイアログを使用して生成されています足場について話していますか?もしそうなら、実際の 'DisplayFor'は' DisplayFor(m => item.SomeProperty) 'です。 – Buildstarted
右ですが、DisplayForを列見出しに使用することはできません(TH要素は自動的に生成されます)。モデルはIEnumerableであるためです。私が探しているのは、IDEが自動的にDisplayName属性にある正しい名前でヘッダー列を設定するようにすることです。 –