このエラーが発生します:
テンプレートは、フィールドアクセス、プロパティアクセス、単一次元配列インデックス、または単一パラメーターのカスタムインデクサー式でのみ使用できます。
これが私のコードです(カスタムHTMLヘルパー、DisplayForをラップして、テンプレートを選択できるようにします):
public static string DisplayLocationTypeFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, LocationType>> expression, bool plural = false)
{
return plural ?
htmlHelper.DisplayFor(expression, "LocationTypePlural").ToHtmlString() :
htmlHelper.DisplayFor(expression).ToHtmlString();
}
私がこのようにそれを使うとき、それは働きます:
@Html.DisplayLocationTypeFor(model => model.LocationType)
にmodel
はのプロパティがあるためLocationType
です。
しかし、別のカスタムHTMLヘルパーでこれを行うと:
public static MvcHtmlString SearchPreferenceButtonForModel<TModel>(this HtmlHelper<TModel> htmlHelper)
{
// .. other code
foreach (var property in htmlHelper.ViewData.ModelMetadata.Properties)
{
if (property.PropertyName == "LocationType")
htmlHelper.DisplayLocationTypeFor(model => ((LocationType)Enum.ToObject(typeof(LocationType), property.Model)), true);
}
}
エラーです。
DisplayLocationTypeFor
代わりにヘルパーを使用するように変更できますが、htmlHelper.Display
方法がわかりません。
何か案は?
私がやろうとしているのは、モデルをレンダリングする特定の方法がありLocationType
、サイト全体で実行したいということです。内部的には、テンプレートはリソースファイルを使用し、URLに基づいて他のいくつかのスマートを使用します。言い換えれば、私が繰り返したくない論理があります。
このように、すべてのビュー/テンプレートは、をレンダリングする標準的な方法としてこのテンプレートを呼び出しますLocationType
。