3

通貨を表示するためにRazorで表示テンプレートを作成しました。これをコードから削除し、文字列形式( "C"に設定可能)を受け入れる標準のテキスト表示テンプレートに置き換えます。

ただし、発生することが多いので、[Obsolete]属性のようなものを警告メッセージとともに使用して、すべてのコードを壊すことなく、今後数週間にわたってこれを実行できるようにしたいと思います。

これは可能ですか、それとも同等の方法がありますか?

乾杯、

アダム。

4

1 に答える 1

0

一見そうではない:(

DisplayTemplatesは汎用です。例:

@Html.DisplayFor(model => model.Foo)

を使用する[Obsolete]には、それらすべてに適用されるDisplayForメソッドをマークする必要があります。私は「より具体的な」バージョンを作成して、それがそれを取得するかどうかを確認しようとしました(次に、次[Obsolete]のように、それをとしてマークできるためです。

public static class MyExtensions
{
    [Obsolete]
    public static MvcHtmlString DisplayFor<TModel, DateTime>(this HtmlHelper<TModel> html, Expression<Func<TModel, DateTime>> expression)
    {
        return html.DisplayFor(expression);
    }
}

残念ながら、これは機能しませんでした。次のエラーが発生します。

コンパイラエラーメッセージ:CS0121:呼び出しは次のメソッドまたはプロパティ間であいまいです:'MvcApplication11.Models.MyExtensions.DisplayFor(System.Web.Mvc.HtmlHelper、System.Linq.Expressions.Expression>)'と'System.Web。 Mvc.Html.DisplayExtensions.DisplayFor(System.Web.Mvc.HtmlHelper、System.Linq.Expressions.Expression>) '

ですから、で必要なことを達成できるとは思いません[Obsolete]。IDEでDisplayForの呼び出しを実際に選択できない場合は、テンプレート内のスタックトレースをログに記録して(テンプレート内で任意のC#を実行できるため)、アプリを実行してみてください。これは防弾ではありませんが、少し役立つかもしれません。

于 2011-10-29T08:29:17.360 に答える