0
我在使用ASP.NET Web页面的实体框架(Razor 3)。我准备好了验证代码,我使用Entity Frameworks自己的验证过程。但是有一个问题,例如在我的模型和数据库中有一个名为的小数字段。我用的是这样的:实体框架中的数据验证
Item.Amount = decimal.Parse(Request.Form["ItemAmount"]);
这里的问题是,如果输入的非数字,我得到一个错误(显然)。我可以很容易地通过检查输入是否是数字来修复它,但如果我这样做,那么验证检查的方式就太多了。我的意思是,我检查它是否是代码中的数字,然后Entity Framework再次检查值,所以我使用了两个不同的验证过程,这对我来说似乎不好。
Ofcourse还有一个客户端,也许我可以使用数字只有文本框,但我不知道。
任何想法?
下面是完整的代码,它可能是太可怕了,我是相当新的实体框架(如3-4天):
if (IsPost)
{
try
{
Worker curWorker = new Worker();
try
{
curWorker = m.Workers.Find(decimal.Parse(Request.Form["WorkerId"]));
}
catch (Exception)
{
errors += "Lütfen bir personel seçin. <br />";
}
overhour.Worker = curWorker;
overhour.PhaseId = curPhase.PhaseId;
try
{
overhour.OverhourAmount = decimal.Parse(Request.Form["OverhourAmount"]);
}
catch (Exception)
{
errors += "Süre (Saat) alanı sayısal olmalıdır. <br />";
}
overhour.OverhourDate = DateTime.Today;
curWorker.Overhours.Add(overhour);
Accounting accounting = new Accounting();
accounting.AccountingMethod = 0;
accounting.AccountingNote = curWorker.WorkerFullName + " adlı personelin, " + overhour.OverhourAmount + " saat süreli, " + DateTime.Today.ToShortDateString() + " tarihli mesai kaydı.";
accounting.AccountingType = 3; // Maaş
accounting.AccountingBorc = 0;
accounting.AccountingAlacak = curWorker.WorkerOverWorkSalary * overhour.OverhourAmount;
accounting.Phases = curPhase;
curWorker.Accountings.Add(accounting);
if (errors != "")
{
throw new WrongValueException(errors);
}
m.SaveChanges();
Response.Redirect(Page.ParentPage);
}
catch (DbEntityValidationException ex)
{
errors = kStatic.getValidationErrors(ex.EntityValidationErrors, "<br />");
}
catch (WrongValueException ex)
{
errors = ex.Message.ToString();
}
catch (Exception ex)
{
errors = "Bilinmeyen hata, teknik detaylar: " + ex.Message;
}
}
改为使用模型绑定 - 当您可以让Post事件接受复杂的数据类型并让MVC执行绑定和验证时,为什么要查询'Request.Form'。然后,你可以检查'Model.IsValid' –
@BrendanGreen我没有实际使用MVC,我试过了,最糟糕的问题是绑定了我,我不知道为什么。 – user5273382
请显示整个发布操作。 –