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
請顯示整個發佈操作。 –