我在用剃刀頁的服務器端驗證的問題(ASP.Net核2.0)剃刀頁面在服務器驗證沒有一些領域返回的
我有一個創建一個記錄頁面
http://localhost:56876/Entries/Create?employeeID=112345
我隱藏文件的代碼爲使用onGET樣子:
[BindProperty]
public EntryLog EntryLog { get; set; }
public Employee Employee{ get; set; }
public string empID { get; set; }
public IActionResult OnGet(string employeeID)
{
empID = employeeID;
// for Selects for lookup tables
ViewData["ReasonId"] = new SelectList(_context.Reason, "Id", "Name");
ViewData["ReasonTypeId"] = new SelectList(_context.ReasonType, "Id", "Name");
return Page();
}
上面的代碼只是正常工作和客戶驗證的作品完美,但我有業務邏輯驗證,如果入場日期是今天的日期和僱傭日期之間的90,我不應該讓條目被保存。
public async Task<IActionResult> OnPostAsync()
{
//Lookup current employeeID hiredDate. if is new employee do not continue.
Employee = await _context.Employee .FirstOrDefaultAsync(p => p.Id == EntryLog.EmployeeID);
//Server side validation
var age = DateTime.Today.Day - Employee.HireDate.Day;
if (age <= 90)
{
ModelState.AddModelError("NewEmp", "Emp is New Warning");
return Page();
}
if (!ModelState.IsValid)
{
return Page();
}
_context.EntryLog.Add(EntryLog);
await _context.SaveChangesAsync();
return RedirectToPage("./Index");
}
我的服務器端驗證工程,但問題是,當我返回Page(); 表單被刷新,兩個選擇元素被清空,EmployeeID元素也被清空。
我的猜測是OnPostAsync()上的返回Page()沒有調用OnGet()方法。
如何在不丟失信息的情況下保持原樣?
您的方法沒有任何模型? – Hadee