我遇到了ASP.NET Core MVC和decimal?
值的问题。
我有以下视图模型:
public class BlobViewModel
{
public int Id { get; set; }
public int? IntegerValue { get; set; }
public string StringValue { get; set; }
[DataType(DataType.Date)]
public DateTime? DateValue { get; set; }
public decimal? DecimalValue { get; set; }
}
我视图中的以下输入元素
<input asp-for="DecimalValue" class="form-control" />
当我输入小数值时,例如“68.5”或“68,5”以及输入元素中的tab,我收到以下错误:
值'68 .5'对DecimalValue无效。
我已尝试使用属性上方的[DataType(DataType.Currency)]
属性,但我似乎无法使绑定工作。其他属性按预期绑定。
有没有人知道我是如何做到这一点的?
答案 0 :(得分:1)
如果本地Windows设置未设置为美国本地化,并且您使用默认的asp.net
模板jquery
验证来验证小数值,则会出现错误。无论您的小数是nullable
还是
在ASP.NET Core
我认为您不能像web.config
那样强制在ASP.NET MVC5
进行美国本地化,就像jquery.validate.js
一样js
和之前一样,所以你必须添加javascript来覆盖validationlocalization
,如同对同一问题的回答一样。
创建一个名为wwwroot\js
的{{1}}文件,并将其放在$.validator.methods.range = function (value, element, param) {
var globalizedValue = value.replace(",", ".");
return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]);
}
$.validator.methods.number = function (value, element) {
return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:[\s\.,]\d{3})+)(?:[\.,]\d+)?$/.test(value);
}
文件夹中,其中包含以下内容
cshtml
在需要进行小数验证的javascript
页面中,将_ValidationScriptsPartial.
文件的引用添加到脚本部分。确保在引用现有@section Scripts {
...
<script src="~/js/validationlocalization.js"></script>
function FnRetrieveSuccess(result) {
$res = JSON.parse(result.d);
console.log(result.d);
$("#tblData tbody").empty();
for ($i = 0; $i < $res.length; $i++) {
$("#tblData tbody").append("<tr id=" + $res[$i].ID + " style='cursor:pointer'><td>" + $res[$i].ID + "</td><td>" + $res[$i].Name + "</td><td>" + $res[$i].ServeceArea + "</dt><td>" + $res[$i].Admin_type + "</td><td><a class='fa fa-pencil'></a><a style='color:red;margin-left:15px; 'class='fa fa-times' onclick='FnDeleteRow(" + $res[$i].ID + ")'></a></td></tr>");
}
if (!$.fn.dataTable.isDataTable('#tblData')) {
table1 = $('#tblData').DataTable();
}
else {
table1 = $("#tblData").DataTable({
"responsive": true,
"processing": true,
"serverSide": true,
"pageLength": 5,
"lengthMenu": [[5, 10, 25, 50, -1], [5, 10, 25, 50, "All"]],
"ordering": true,
"columnDefs": [{ "targets": 6, "orderable": false }],
"fnRowCallback": function (nRow, aData, iDisplayIndex, iDisplayIndexFull) {
$(nRow).attr("id", aData[0]);
return nRow;
}
});
}
}
关于此解决方法的