ModelState的十进制无效(2000.00)

时间:2018-07-18 07:10:38

标签: javascript c# asp.net-mvc

我无法验证我的模型medewerker_functie的1个实例。

在该模型中,我有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),但这只是将其保留为字符串而没有。 t更改值。

这是我的ActionResult Create

[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; }

我的全球化也设置为nl-NL

<globalization culture="nl-NL" uiCulture="nl-NL"/>

我尝试使用culInfo转换为小数,并且没有替换({替换为.),反之亦然,但是没有任何想法吗?

但是令我更困惑的是,它确实接受fulltime_salaris的2200.00和uren的40.0。

哦,在我的数据库中,这些字段也指定为decimal(18,2);

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

showing error in debugger mode


编辑

这是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!');
  }
});

1 个答案:

答案 0 :(得分:0)

此修复程序正在更改参数String salaris的名称。我只能假定它与Bind参数Salaris冲突,因此我将dec_salaris放入模型中,但是ModelState.IsValid正在检查仍为{{ 1}},因此无效。.

感谢大家的协助x)