2014-05-24 8 views
1

RazorEngine используется для запуска представлений RRor C# в приложении ASP.NET MVC4.Как игнорировать DivideByZeroException в представлениях Razor

Просмотров содержат десятичные выражения, завернутые в вызове функции пользовательского формата, как

<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 "" 
} 

} 

но получил ошибку компиляции, так как не существует Запуск метода.

+1

Вам не следует размещать какую-либо логику в виде. Таким образом, вы можете добавить другое свойство readonly к вам, которое отобразит деление в нужном формате. – Uriil

ответ

1

Если вы знаете имя someotherdecimalexpression во время выполнения вы можете сделать следующее:

string name = "someotherdecimalexpression"; 
template = template.Replace(name, "(double)" + name); 

Это будет конвертировать все someotherdecimalexpression до double для расчета, и вы получите Infinity вместо исключения.

Но помните о «побочных эффектах», например, если name - это то, что можно было бы использовать, например. «в тексте» ...

1

Я согласен с комментарием Уриила. Если вы все еще хотите логику на окне вы можете обойти эту ошибку используя при

<div> 
    @if(someotherdecimalexpression != 0){ 
     Format(somedecimalexpression/someotherdecimalexpression) 
    } 
</div> 
+0

выражение может быть сложным, может содержать количество разделов, вызовы .NET-методам и другие действия в области искусственности. Как найти все someotherdecimalexpresioon выражения, которые могут вызвать ошибки разделения? Похоже, что ваш ответ требует ручного разбора выражений, чтобы найти возможные деления на ноль. Как это реализовать? – Andrus

 Смежные вопросы

  • Нет связанных вопросов^_^