1

RazorEngine 用于在 ASP.NET MVC4 应用程序中运行 C# Razor 视图。

视图包含包装到自定义格式函数调用的十进制表达式,例如

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

这会导致异常

Attempted to divide by zero

如果 someotherdecimalexpression 值为 0

如何强制剃须刀引擎忽略除以零异常?如果发生这种情况,它可以在空字符串上返回大十进制数或 null。

表达式由最终用户在运行时创建。数据库字段具有十进制类型,并且很难将所有操作数转换为双精度以消除此异常。

在项目属性中未选中检查是否存在人工溢出,但这无济于事。我试过了

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

在模板基类中

public string Eval(string expression) {

try {

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

}

但由于没有 Run 方法而出现编译错误。

4

2 回答 2

1

我同意 Uriil 的评论。如果您仍然想要视图上的逻辑,您可以使用 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);

这会将所有转换someotherdecimalexpressiondouble计算并且您得到Infinity而不是异常。

但是请注意“副作用”,例如是否name也可以使用,例如“在文本中”......

于 2014-06-03T11:19:14.760 回答