如何在Razor视图中忽略DivideByZeroException

本文关键字:DivideByZeroException 视图 Razor | 更新日期: 2023-09-27 18:04:48

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

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

<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 ""
}
}

如何在Razor视图中忽略DivideByZeroException

如果您在运行时知道someotherdecimalexpression的名称,您可以执行以下操作:

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

这将把所有的someotherdecimalexpression转换为double进行计算,你得到Infinity而不是一个异常。

但是要注意"副作用",比如如果name也可以使用,例如:"文本"…

我同意uril的评论。如果您仍然希望视图上的逻辑,您可以使用If

绕过错误。
<div>
    @if(someotherdecimalexpression != 0){
        Format(somedecimalexpression/someotherdecimalexpression)
    }
</div>
相关文章:
  • 没有找到相关文章