1

RazorEngine は、ASP.NET MVC4 アプリケーションで C# Razor ビューを実行するために使用されます。

ビューには、次のようなカスタム Format 関数呼び出しにラップされた 10 進数式が含まれています

<div>@Format(somedecimalexpression/someotherdecimalexpression)</div>

これにより例外が発生します

Attempted to divide by zero

someotherdecimalexpression 値が 0 の場合

かみそりエンジンにゼロ除算例外を無視させるにはどうすればよいですか? これが発生した場合、空の文字列に対して大きな 10 進数または null を返すことができます。

式は、実行時にエンド ユーザーによって作成されます。データベース フィールドには decimal 型があり、すべてのオペランドを double に変換してこの例外を取り除くことは困難です。

プロジェクトのプロパティで人工的なオーバーフローのチェックがオフになっていますが、これは役に立ちません。私は試した

<div>@Eval("somedecimalexpression/0")</div>

およびテンプレート基本クラスで

public string Eval(string expression) {

try {

  return Format(Run(expression));
}
catch (DivideByZeroException) {
  return ""
}

}

Runメソッドがないのでコンパイルエラー。

4

2 に答える 2

1

ウリエルさんの意見に賛成です。ビューにロジックが必要な場合は、if を使用してエラーを回避できます。

<div>
    @if(someotherdecimalexpression != 0){
        Format(somedecimalexpression/someotherdecimalexpression)
    }
</div>
于 2014-05-24T14:17:29.260 に答える
1

実行時に の名前がわかっている場合someotherdecimalexpressionは、次のことができます。

string name = "someotherdecimalexpression";
template = template.Replace(name, "(double)" + name);

これにより、計算のためにすべてが変換someotherdecimalexpressionされ、代わりに例外が発生します。doubleInfinity

nameただし、「テキスト内」などで使用できるものである場合など、「副作用」に注意してください...

于 2014-06-03T11:19:14.760 に答える