RazorEngine используется для запуска представлений С# Razor в приложении ASP.NET MVC4.
Представления содержат десятичные выражения, завернутые в пользовательский вызов функции функции Format
<div>@Format(somedecimalexpression/someotherdecimalexpression)</div>
Это вызывает исключение
Attempted to divide by zero
если значение someotherdecimalexpression равно 0
Как заставить двигатель бритвы игнорировать деление на нулевое исключение? Он может возвращать большое десятичное число или null в пустой строке, если это происходит.
Выражения создаются конечными пользователями во время выполнения. Поля базы данных имеют десятичный тип и сложно преобразовать все операнды в двойные, чтобы удалить это исключение.
Проверить, что переполнение artihmetic не проверяется в свойствах проекта, но это не помогает. Я пытался
<div>@Eval("somedecimalexpression/0")</div>
и в базовом классе шаблонов
public string Eval(string expression) {
try {
return Format(Run(expression));
}
catch (DivideByZeroException) {
return ""
}
}
но получил ошибку компиляции, так как не существует метода Run.
Если вы знаете имя someotherdecimalexpression
во время выполнения, вы можете сделать следующее:
string name = "someotherdecimalexpression";
template = template.Replace(name, "(double)" + name);
Это преобразует все someotherdecimalexpression
в double
для вычисления, и вы получите Infinity
вместо исключения.
Но имейте в виду "побочные эффекты", например, если это name
которое также можно использовать, например, "в тексте"...
Я согласен с комментарием Уриила. Если вам все еще нужна логика в представлении, вы можете обойти ошибку, используя if
<div>
@if(someotherdecimalexpression != 0){
Format(somedecimalexpression/someotherdecimalexpression)
}
</div>