如何在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 ""
}
}
如果您在运行时知道someotherdecimalexpression
的名称,您可以执行以下操作:
string name = "someotherdecimalexpression";
template = template.Replace(name, "(double)" + name);
这将把所有的someotherdecimalexpression
转换为double
进行计算,你得到Infinity
而不是一个异常。
但是要注意"副作用",比如如果name
也可以使用,例如:"文本"…
我同意uril的评论。如果您仍然希望视图上的逻辑,您可以使用If
绕过错误。<div>
@if(someotherdecimalexpression != 0){
Format(somedecimalexpression/someotherdecimalexpression)
}
</div>