我无法验证我的模型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)
;
我想我会提到这是对错误的完全搜索,因为它几乎被掩埋了,但这是我发现错误的地方:
编辑
这是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!');
}
});
答案 0 :(得分:0)
此修复程序正在更改参数String salaris
的名称。我只能假定它与Bind参数Salaris
冲突,因此我将dec_salaris
放入模型中,但是ModelState.IsValid
正在检查仍为{{ 1}},因此无效。.
感谢大家的协助x)