Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ModelState对十进制无效(2000.00)_Javascript_C#_Asp.net Mvc - Fatal编程技术网

Javascript ModelState对十进制无效(2000.00)

Javascript ModelState对十进制无效(2000.00),javascript,c#,asp.net-mvc,Javascript,C#,Asp.net Mvc,我在验证模型的1个实例时遇到问题medewerker\u functie 在该模型中,我有3个十进制的实例,其中2个正在验证,而Salary没有 这3个实例是uren为40.0,fulltime_salaris为2200.00,salaris为2000.00 在我的Actionresult Create中,我将这些值作为字符串获取,原因是我使用JavaScript从字段中获取值:在填写salaris输入字段时: onblur="$(this).val(parseFloat($(this).val

我在验证模型的1个实例时遇到问题
medewerker\u functie

在该模型中,我有3个十进制的实例,其中2个正在验证,而
Salary
没有

这3个实例是
uren
为40.0,
fulltime_salaris
为2200.00,
salaris
为2000.00

在我的
Actionresult Create
中,我将这些值作为字符串获取,原因是我使用JavaScript从字段中获取值:在填写
salaris
输入字段时:

onblur="$(this).val(parseFloat($(this).val()).toFixed(2))"
用于展示目的

然后就在AJAX调用之前,我使用jQuery获取值,并认为应该尝试将其设置为数字类型的值,所以我做了另一个
parseFloat(2000.00)。toFixed(2)
,但这只是将其作为字符串保留,并且不会更改值

这是我的
操作结果创建

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID,medID,functieID,type_contract,startdatum,einddatum,aantal_uur,aantal_dagen,fulltime_salaris,salaris")] medewerker_functie medewerker_functie, int medID, int functieID, string contract, DateTime startDate, DateTime? endDate, String uren, int dagen, String fulltime, String salaris)
{

    System.Globalization.CultureInfo culInfo = new System.Globalization.CultureInfo("en-EN", false);

    decimal dec_uren = Convert.ToDecimal(uren.Replace('.', ','), culInfo);
    decimal dec_fulltime = Convert.ToDecimal(fulltime.Replace('.', ','), culInfo);
    decimal dec_salaris = Convert.ToDecimal(salaris.Replace('.', ','), culInfo);

    //Vervang decimaal punten met comma's
    //uren = uren.Replace('.', ',');
    //fulltime = fulltime.Replace('.', ',');
    //salaris = salaris.Replace('.', ',');

    //decimal dec_uren = Convert.ToDecimal(uren);
    //decimal dec_fulltime = Convert.ToDecimal(fulltime);
    //decimal dec_salaris = Convert.ToDecimal(salaris);

    //vull medewerker_functie met waardes
    medewerker_functie.medID = medID;
    medewerker_functie.functieID = functieID;
    medewerker_functie.type_contract = contract;
    medewerker_functie.startdatum = startDate;
    medewerker_functie.einddatum = endDate;
    medewerker_functie.aantal_dagen = dagen;

    //These are the fields in question but mostly just salaris.
    medewerker_functie.aantal_uur = dec_uren;
    medewerker_functie.fulltime_salaris = dec_fulltime;
    //medewerker_functie.salaris = Convert.ToDecimal(salaris);
    medewerker_functie.salaris = dec_salaris;

    if (ModelState.IsValid) //The value '2000.00' is not valid for salaris
    {
        db.medewerker_functie.Add(medewerker_functie);
        db.SaveChanges();
        return RedirectToAction("Details", "medewerker");
    }

    ViewBag.functieID = new SelectList(db.functie, "ID", "Functie1", medewerker_functie.functieID);
    ViewBag.medID = new SelectList(db.medewerker, "ID", "roepnaam", medewerker_functie.medID);
    return View(medewerker_functie);
}
在我的模型中,它们也被指定为十进制:

public decimal aantal_uur { get; set; }
public Nullable<decimal> fulltime_salaris { get; set; }
public Nullable<decimal> salaris { get; set; }
我试过用
culInfo
和不使用
转换成十进制,用替换,转换成
和其他方法,但似乎都不起作用,有什么想法吗

但更让我困惑的是,它确实接受2200.00的全日制salaris和40.0的uren

哦,在我的数据库中,字段也被指定为
十进制(18,2)

我想我应该提到,这是对错误的搜索,因为它几乎被掩埋了,但这就是我发现错误的地方:


编辑

这是AJAX调用:

console.log(uren, fullTime, salaris); //returns 40.0, 2200.00, 2000.00
console.log($.type(uren), $.type(fullTime), $.type(salaris)); // returns string, string, string

var floatUren = parseFloat(uren).toFixed(1);
var floatFullTime = parseFloat(fullTime).toFixed(2);
var floatSalaris = parseFloat(salaris).toFixed(2);

console.log(floatUren, floatFullTime, floatSalaris); //returns 40.0, 2200.00, 2000.00
console.log($.type(floatUren), $.type(floatFullTime), $.type(floatSalaris)); // returns string, string, string

var form = $('#__AjaxAntiForgeryForm');
var token = $('input[name="__RequestVerificationToken"]', form).val();
$.ajax({
  type: "POST",
  url: '@Url.Action("Create", "medewerker_functie")',
  data: {
    __RequestVerificationToken: token,
    medID: medewerker,
    functieID: functie,
    contract: contract,
    startDate: startDate,
    endDate: endDate,
    uren: floatUren,
    dagen: dagen,
    fullTime: floatFullTime,
    salarispara: floatSalaris
  },
  success: function() {
    alert('Succes!');
  },
  error: function() {
    alert('Failure!');
  }
});

修复程序正在更改参数
字符串salaris
的名称。我只能假设它与绑定参数
Salaris
冲突,因此我将
dec_Salaris
放在模型中,但
ModelState.IsValid
正在检查仍然是
字符串的
Bind参数Salaris
,因此无效


感谢大家的帮助x)

听起来您需要一个自定义的模型绑定器才能使用不同的分隔符,因为无论当前区域性设置如何,
toFixed
方法都将返回带小数点分隔符的数值。奇怪。。在这篇文章发表后,我立即更改了paramater salaryPara,看看是否有名字冲突。现在,
ModelState.isValid
返回
true
。。。但是我的ajax调用仍然抛出一个
错误
而不是
成功
如果ajax回调结果进入
错误
部分,那么在提供传递的数据时应该出现了一些问题。您能否提供一些线索,说明使用哪种AJAX回调传递十进制值?让我更新一下问题,给我5分钟我也想和大家分享一张表格,表格中的字段是用一堆变量构建的,并且是分部分设置的,所以很难阅读,除非我给你所有的内容,你必须自己把各个部分粘在一起。但这是工资输入
onSalarisBlur
onblur=“$(this).val(parseFloat($(this).val()).toFixed(2))”
numberFieldStyle
只是
css
console.log(uren, fullTime, salaris); //returns 40.0, 2200.00, 2000.00
console.log($.type(uren), $.type(fullTime), $.type(salaris)); // returns string, string, string

var floatUren = parseFloat(uren).toFixed(1);
var floatFullTime = parseFloat(fullTime).toFixed(2);
var floatSalaris = parseFloat(salaris).toFixed(2);

console.log(floatUren, floatFullTime, floatSalaris); //returns 40.0, 2200.00, 2000.00
console.log($.type(floatUren), $.type(floatFullTime), $.type(floatSalaris)); // returns string, string, string

var form = $('#__AjaxAntiForgeryForm');
var token = $('input[name="__RequestVerificationToken"]', form).val();
$.ajax({
  type: "POST",
  url: '@Url.Action("Create", "medewerker_functie")',
  data: {
    __RequestVerificationToken: token,
    medID: medewerker,
    functieID: functie,
    contract: contract,
    startDate: startDate,
    endDate: endDate,
    uren: floatUren,
    dagen: dagen,
    fullTime: floatFullTime,
    salarispara: floatSalaris
  },
  success: function() {
    alert('Succes!');
  },
  error: function() {
    alert('Failure!');
  }
});