RazorEngine用于在ASP.NET MVC4应用程序中运行C#Razor视图。
视图包含包含在自定义格式函数调用中的十进制表达式,如
<div>@Format(somedecimalexpression/someotherdecimalexpression)</div>
这会导致异常
Attempted to divide by zero
如果someotherdecimalexpression值为0
如何强制剃刀引擎忽略除零异常?如果发生这种情况,它可以返回大的十进制数或空字符串为空。
表达式由最终用户在运行时创建。 数据库字段具有十进制类型,很难将所有操作数转换为double以删除此异常。
检查artihmetic溢出是否未在项目属性中检查,但这没有帮助。 我试过了
<div>@Eval("somedecimalexpression/0")</div>
并在模板基类
中public string Eval(string expression) {
try {
return Format(Run(expression));
}
catch (DivideByZeroException) {
return ""
}
}
但由于没有Run方法而导致编译错误。
答案 0 :(得分:1)
我同意Uriil的评论。如果您仍然想要视图中的逻辑,则可以使用if
来解决错误<div>
@if(someotherdecimalexpression != 0){
Format(somedecimalexpression/someotherdecimalexpression)
}
</div>
答案 1 :(得分:1)
如果您在运行时知道someotherdecimalexpression
的名称,则可以执行以下操作:
string name = "someotherdecimalexpression";
template = template.Replace(name, "(double)" + name);
这会将所有someotherdecimalexpression
转换为double
进行计算,您将获得Infinity
而不是例外。
但请注意“副作用”,例如name
是否也可以使用,例如“在文字中......”