[英]How to ignore DivideByZeroException in Razor views
RazorEngine用於在ASP.NET MVC4應用程序中運行C#Razor視圖。
視圖包含十進制表達式,這些表達式包裝到自定義Format函數調用中,例如
<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 ""
}
}
但由於沒有Run方法而導致編譯錯誤。
我同意Uriil的評論。 如果仍然需要視圖上的邏輯,則可以使用if來避免錯誤。
<div>
@if(someotherdecimalexpression != 0){
Format(somedecimalexpression/someotherdecimalexpression)
}
</div>
如果您在運行時知道someotherdecimalexpression
的名稱,則可以執行以下操作:
string name = "someotherdecimalexpression";
template = template.Replace(name, "(double)" + name);
這會將所有其他someotherdecimalexpression
表達式轉換為用於計算的double
值,並且您將獲得Infinity
而不是異常。
但是要注意“副作用”,例如name
是否可以使用,例如“在文本中” ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.