0

私は次の問題に苦しんでいます、そしてそれを解決するための許容できる方法を見つけることができません。

私の課題は、Razorビューの実際のプロパティ値の直前にHTMLコメントを書き出すことです。

これは私の(単純化された)ビューモデルです:

public class Article
{
    public string Title {get;set;}
}

このタイトルを書き出すには、Razorビューでこれを実行します。

<h2>@Model.Title</h2>

次に、実際のタイトルの直前にhtmlコメントを書き出して、生成されたHTMLが次のようになるようにします(単純化)。

<h2><!-- some parameters for a 3th party system --> This is my title</h2>

HTMLコメントは、「タイトル」属性に適用した属性から取得されます。値が生成されるため、属性値は.NETFrameworkのTypeDescriptorを使用して実行時に追加されます。

これで、HTMLヘルパーを使用してすべてのプロパティを書き出すだけでこれを実現できることがわかりました。このように:@ MyHelper.Write(m => m.Title)

しかし、潜在的にすべてのプロパティにこのHTMLコメントが必要なため、ビューが乱雑になり、ビューが見栄えが良く(より)読みやすくならないため、HTMLヘルパーの使用を避けたいと思います。

これは私が試したことです:

  • カスタムRazorベースページを作成しました(から継承WebViewPage<TModel>)。そして、それを'Write'メソッドで上書きします。

この種の作品ですが、ここでの最大の問題は、その時点でどのプロパティが書き出されているのかわからないことです。'Write'メソッドで現在のプロパティ名を取得する方法はありません。そこで、モデルを動的に検索して、書き出された値を持つプロパティを見つけ、属性のHTMLコメントを付加します。

私の質問:私が望むことを達成するための別のアプローチはありますか?前に言ったように:私はすべてのプロパティを書き出すためにHTMLヘルパーを使用することを避けたいです。(ループなどについて考えてみてください。それは良くありません)。

また、次の理由から、このHTMLコメントをコントローラーに追加することはできません。

  1. 実際の値の一部ではありません。一種のメタデータです。
  2. HTMLコメントは、 「s」、「 intdouble」、およびDateTime「s」に追加する必要があります。文字列を含めるようにdoubleプロパティを調整する方法はありません。(画像a List<DateTime>。すべての日付にこのHTMLコメントが必要です)
  3. HTMLコメントは、web.config設定に基づいて追加する必要があります。はいまたはいいえ。(実際のHTMLコメントは、プロパティの値ごとに異なります)

この質問はかなり長いと思います。そのために残念。どんな考えでもありがたいです。

4

1 に答える 1

1

既存のものを使用できます@Html.Raw(Model.Title)

または、表示テンプレートを使用することもできます。このように動作させたいプロパティにUIHintAttributeを追加します。

public class MyModel 
{
    [UIHint("Raw")]
    public string MyString { get; set; }
}

Raw.cshtml文字列型のモデルを受け入れるという新しい表示テンプレートを作成します。

@model string
@Html.Raw(model)

次に、ビューで次を使用できます。

@Html.DisplayFor(m => m.MyString)

これでも、ヘルパー()を使用する必要がありますDisplayFor。これは、最小限のコード変更で1つまたは複数のフィールドの動作を簡単に変更できるようにするための推奨プラクティスです。

于 2013-01-19T13:41:40.447 に答える