如何在Razor视图中忽略DivideByZeroException

时间:2014-05-24 08:10:18

标签: c# asp.net-mvc-4 razor razorengine dividebyzeroexception

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方法而导致编译错误。

2 个答案:

答案 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是否也可以使用,例如“在文字中......”