首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Razor视图中忽略DivideByZeroException

如何在Razor视图中忽略DivideByZeroException
EN

Stack Overflow用户
提问于 2014-05-24 08:10:17
回答 2查看 936关注 0票数 1

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

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

代码语言:javascript
复制
<div>@Format(somedecimalexpression/someotherdecimalexpression)</div>

这会导致异常。

代码语言:javascript
复制
Attempted to divide by zero

如果其他小数表达式值为0

如何迫使剃须刀发动机忽略零例外除法?如果出现这种情况,它可以在空字符串上返回大十进制数或null。

表达式由最终用户在运行时创建。数据库字段具有十进制类型,很难将所有操作数转换为双重操作数以删除此异常。

在项目属性中未检查是否存在伪溢出,但这无助于此。我试过了

代码语言:javascript
复制
<div>@Eval("somedecimalexpression/0")</div>

以及模板基类中的

代码语言:javascript
复制
public string Eval(string expression) {

try {

  return Format(Run(expression));
}
catch (DivideByZeroException) {
  return ""
}

}

但是由于没有运行方法,所以得到了编译错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-03 11:19:14

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

代码语言:javascript
复制
string name = "someotherdecimalexpression";
template = template.Replace(name, "(double)" + name);

这将将计算的所有someotherdecimalexpression转换为double,您将得到Infinity而不是异常。

但是要注意“副作用”,比如如果name也可以被使用,例如“在文本中”.

票数 1
EN

Stack Overflow用户

发布于 2014-05-24 14:17:29

我同意乌里尔的评论。如果您仍然想要视图上的逻辑,可以使用If避免错误。

代码语言:javascript
复制
<div>
    @if(someotherdecimalexpression != 0){
        Format(somedecimalexpression/someotherdecimalexpression)
    }
</div>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23842746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档