簡體   English   中英

如何在Razor視圖中忽略DivideByZeroException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM