В настоящее время я создаю формы для контрактов, одно из полей предназначено для% скидки, и было объявлено в десятичном виде в Entity Framework.
У меня возникает проблема, когда я ввожу значение и сохраняю его.
Быстрый обзор кода:
EF: tblContract -> Rebate - это десятичное поле.
Создание / редактирование вида:
<%: Html.TextBoxFor(model => model.Rebate, new { @class="form-txt-normal" }) %>
Я пытался вводить числа разными способами.
75: когда я даю ему что-то, что может быть проанализировано в int, оно сохраняет правильное значение в поле (как ни странно, при последующем отображении десятичная точка не отображается, только 75).
75.25: Я наблюдал за значением, которое передается в метод редактирования [HttpPost] (то же самое для Create). Когда вводится десятичное значение, переменная равна нулю. Мой выходной экран показывает, что произошло исключение:
A first chance exception of type 'System.Linq.Dynamic.ParseException' occurred in ContractManagementTool.DLL
Я также попытался 75,25, чтобы исключить настройки культуры о том, какой должна быть десятичная точка / запятая, но возникает та же проблема.
У меня есть несколько других полей, которые содержат целые, они обрабатываются точно так же, с той лишь разницей, что Entity Framework знает их как Int32, а не как десятичное число. В Int32 все работает, в десятичном формате нет.
Я что-то здесь упускаю? Может ли MVC не работать с десятичными числами, так как он работает с целыми числами?
Дальнейшее обновление:
Я получил часть его работы. Я не изменил код (за исключением некоторого jQuery, я объясню).
Когда я ввожу 75,25, переменная Rebate правильно передается методу (что имеет смысл, поскольку я нахожусь в Бельгии, и мы используем ее для десятичных разрывов :)) Я добавил некоторые jQuery для замены. с, когда пользователь вводит данные, чтобы упростить его.
Когда я публикую переменную, десятичное значение Rebate имеет значение 75,25 (теперь EF вступает во владение с десятичной точкой). Rebate уже есть в моей сущности tblContract, которая передается методу. Я выполняю db.ApplyCurrentValues (foo);
Теперь вот изюминка: в моей базе данных значение 75 сохраняется. Нет десятичной точки, ничего. Теперь я могу правильно передать его в свой метод, но не могу сохранить его в базе данных.
Окончательное обновление:
Я решил это. Для тех, кто интересуется ответом: если вы не укажете масштаб десятичной дроби, то это 0. Я, кажется, помню, что стандартом было 2 для EF, но я могу ошибаться.