RazorEngine用于在ASP.NET MVC4应用程序中运行C# Razor视图。
视图包含包装为自定义格式函数调用的十进制表达式,如
<div>@Format(somedecimalexpression/someotherdecimalexpression)</div>这会导致异常。
Attempted to divide by zero如果其他小数表达式值为0
如何迫使剃须刀发动机忽略零例外除法?如果出现这种情况,它可以在空字符串上返回大十进制数或null。
表达式由最终用户在运行时创建。数据库字段具有十进制类型,很难将所有操作数转换为双重操作数以删除此异常。
在项目属性中未检查是否存在伪溢出,但这无助于此。我试过了
<div>@Eval("somedecimalexpression/0")</div>以及模板基类中的
public string Eval(string expression) {
try {
return Format(Run(expression));
}
catch (DivideByZeroException) {
return ""
}
}但是由于没有运行方法,所以得到了编译错误。
发布于 2014-06-03 11:19:14
如果在运行时知道someotherdecimalexpression的名称,可以执行以下操作:
string name = "someotherdecimalexpression";
template = template.Replace(name, "(double)" + name);这将将计算的所有someotherdecimalexpression转换为double,您将得到Infinity而不是异常。
但是要注意“副作用”,比如如果name也可以被使用,例如“在文本中”.
发布于 2014-05-24 14:17:29
我同意乌里尔的评论。如果您仍然想要视图上的逻辑,可以使用If避免错误。
<div>
@if(someotherdecimalexpression != 0){
Format(somedecimalexpression/someotherdecimalexpression)
}
</div>https://stackoverflow.com/questions/23842746
复制相似问题