我几个小时以来一直在寻找此案例的解决方案,但没有找到任何适合我的方法。
这里我们使用逗号作为小数分隔符,当我发送一个像“15,50”这样的值时,在我的控制器中我得到的模型值为“1550”,并且只有当我发送“15.50”时才有意义。
我涵盖了以下主题,但没有任何效果。
在 Asp.net Core 中设置 CultureInfo 以获得 .作为CurrencyDecimalSeparator 而不是 , https://stackoverflow.com/questions/40442444/set-cultureinfo-in-asp-net-core-to-have-a-as-currencydecimalseparator-instead
Aspnet Core 十进制绑定不适用于非英语文化 https://stackoverflow.com/questions/39737607/aspnet-core-decimal-binding-not-working-on-non-english-culture
我用ajax发送表单,使用$form.serializeArray()
如下:
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;
}
send:
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);
}
});
}
我的控制器:
[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
}
}
我的模型.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
}
});