Я работаю над финансовым программным обеспечением, которое использует много валютных значений и процентов.Не думая о юзабилити, если вы создаете TextBox по умолчанию и привязываете его к десятичному значению 0.00M
, он представляется пользователю как 0.00
.Не ясно, должны ли они вводить 6% как 6,00 или 0,06.Вы также сталкиваетесь с проблемой, когда .065 отображается как 0,06, что делает значение неверным для пользователя.
Чтобы прояснить смысл чисел, я использую атрибуты отображения, такие как:
[Display(Name = "State Tax Rate")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:P2}")]
public decimal StateRate { get; set; }
[Display(Name = "Combined Tax Rate")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:P2}")]
public decimal CombinedRate { get; set; }
[Display(Name = "County Tax Rate")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:P2}")]
public decimal CountyRate { get; set; }
Теперь 6,5% отображается как 6,50%, что лучше с точки зрения удобства использования, но при публикации формы на контроллере ASP.Net Core MVC значения не связываются.Простое удаление знака процента приводит к тому, что он связывается на 650%.Подход, который я использую, состоит в том, чтобы использовать JQuery для очистки данных перед публикацией сообщения:
// deal with percentages:
// 6.5% does not bind, but is displayed to the user.
// 6.5 binds incorrectly (650%)
// .065 is desired format
$(function () {
$('#my-form').on('submit', function (e) {
e.preventDefault(); // avoid default post routine
// change "6.50%" to 6.5
var stateRate = parseFloat($('#StateRate').val().replace('%', ''));
var combinedRate = parseFloat($('#EstCombinedRate').val().replace('%', ''));
var countyRate = parseFloat($('#EstCountyRate').val().replace('%', ''));
// change 6.5 to .065 - leave 0.065 alone.
if (stateRate > 1) {
stateRate = stateRate / 100.0;
}
if (combinedRate > 1) {
combinedRate = combinedRate / 100.0;
}
if (countyRate > 1) {
countyRate = countyRate / 100.0;
}
// put the cleaned up values back into the form fields
$('#StateRate').val(stateRate);
$('#CombinedRate').val(combinedRate);
$('#CountyRate').val(countyRate);
// make ajax request
$.post(
'/MyController/EditTaxRates'
$(this).serialize(),
function (data, status, jqXHR) {
$.notify('Data saved successfully!', { position: "top center" });
}
).fail(function () {
$.notify('Error saving data.', { position: "top center" });
});
});
});
В большинстве случаев это работает правильно, но мне нужно реализовать это во многих местах, иэто добавляет много кода для решения, казалось бы, фундаментальной и простой проблемы.Кроме того, он не подходит для налоговой ставки округа, такой как 0,5%, которая связывает 50% при использовании этого кода в письменном виде.Существуют ли какие-либо встроенные приемы, такие как атрибуты или волшебство Razor, которые приведут к правильному связыванию данных без использования javascript, или есть лучший метод для решения этой проблемы?