如何绑定可空的十进制值

时间:2016-09-04 17:52:26

标签: asp.net-core asp.net-core-mvc asp.net-core-1.0

我遇到了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)]属性,但我似乎无法使绑定工作。其他属性按预期绑定。

有没有人知道我是如何做到这一点的?

1 个答案:

答案 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;
                }


            });
        }

    }
关于此解决方法的

this