数小时以来,我一直在寻找这种情况的解决方案,但没有找到对我有用的解决方案。

在这里,我们使用逗号作为小数点分隔符,当我发送“15,50”之类的值时,在我的 Controller 中我得到的模型值为“1550”,只有当我发送“15.50”时才有意义。

我涵盖了以下主题,但没有任何效果。

Set CultureInfo in Asp.net Core to have a . as CurrencyDecimalSeparator instead of ,

Aspnet Core Decimal binding not working on non English Culture

我使用下面的$form.serializeArray()发送带有ajax的表单:

function getFormData(xform) {
    var $form = $('#' + xform);
    var unindexed_array = $form.serializeArray();
    var indexed_array = {};

    $.map(unindexed_array, function (n, i) {
        indexed_array[n['name']] = n['value'];
    });
    return indexed_array;
}

发送:
function PostFormAjax(controller, metodo, params, redir, divacao, reloadgrid) {

    if (params != null) {
        var formData = new FormData();

        var json = $.parseJSON(JSON.stringify(params));
        $(json).each(function (i, val) {
            $.each(val, function (k, v) {
                console.log(k + " : " + v);
                formData.append(k, v);
            });
        });
    }

    $.ajax({
        url: '/' + controller + '/' + metodo,
        data: JSON.stringify(params),
        contentType: 'application/json',
        type: 'POST',
        success: function (data) {
            AjaxFim(metodo, data, redir, divacao, reloadgrid);
        }
    });
}

我的 Controller :
    [HttpPost]
    public IActionResult GravaProduto([FromBody] Produtos produto)
    {
        if (ModelState.IsValid)
        {
         //produto.Valorcusto is 1550 and not 15,50 as it was posted
         //produto.Valorvenda is 1550 and not 15,50 as it was posted
        }
    }

我的Model.cs
public partial class Produtos
{
    public int Cod { get; set; }
    public string Descricao { get; set; }
    public decimal Valorcusto { get; set; }
    public decimal Valorvenda { get; set; }
}

我尝试用替换formData.append(k, v.replace(',', '.')); ,但也无法正常工作,我也不知道哪个字段是小数。

我需要做什么?因为迷路了,本来应该更简单的事情变得更加复杂。

在找到解决方案之前,我一直努力进行以下工作:

根据我所在的地区佩戴口罩:
$('.stValor').mask("#.###.##0,00", { reverse: true });

在发布表单之前,我切换到可接受的格式:
$('#fCadAltProd').validator().on('submit', function (e) {
    if (e.isDefaultPrevented()) {
    } else {
        e.preventDefault();
        $('.stValor').mask("#,###,##0.00", { reverse: true });
        //Ajax post here
    }
});

最佳答案

使用此插件jquery.serializeToJSON
并将 getFormData()函数更改为

function getFormData(xform) {
    var $form = $('#' + xform);
    var obj = $form.serializeToJSON({
        parseFloat: {
            condition: ".stValor,.stQnt,.stDesconto",
            nanToZero: true,
            getInputValue: function (i) {
                return i.val().split(".").join("").replace(",", ".");
            }
        }
    });
    return obj;
}

parseFloat.getInputValue:function(){},默认情况下,返回不带逗号的输入值,转换时不会发生错误。如果您的位置使用逗号进行小数点分隔(例如德语或巴西),则可以更改为
function(i){
    return i.val().split(".").join("").replace(",", ".");
}

这将为您完成所有工作。

关于c# - 带十进制值的asp.net core 2.0绑定(bind)模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50977542/

10-15 19:00