2

このエラーが発生します:

テンプレートは、フィールドアクセス、プロパティアクセス、単一次元配列インデックス、または単一パラメーターのカスタムインデクサー式でのみ使用できます。

これが私のコードです(カスタム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

4

2 に答える 2

1

エラーメッセージを読む必要があります:

テンプレートは、フィールド アクセス、プロパティ アクセス、単一次元の配列インデックス、または単一パラメーターのカスタム インデクサー式でのみ使用できます。

Razor テンプレートでは、特定のタイプの (非常に単純な!) ラムダ式のみが許可されていることを示しています。より複雑なものがある場合は、テンプレートに渡す前に値を計算する必要があります。このようなものが動作するはずです:

if (property.PropertyName == "LocationType") {
  LocationType locationType = (LocationType) Enum.ToObject(typeof(LocationType), property.Model));
  htmlHelper.DisplayLocationTypeFor(model => locationType, true);
} 
于 2012-08-17T05:43:05.637 に答える
0

LocationTypeこれは、モデルの表示テンプレートを作成することで実現できます。

これは、それを達成する方法を示す答えです。要するに:

  1. フォルダを作成します~/Views/Shared/DisplayTemplates
  2. LocationTypeモデル タイプ で作成した新しいフォルダにという名前のビューを作成しますLocationType。を試すたびに@DisplayFor(model => model.LocationType)、作成したビューLocationTypeがレンダリングされます。
于 2012-08-17T04:06:24.557 に答える