Tôi có một bộ điều khiển với hai hành động:ASP.NET MVC Mẫu repopulation
[AcceptVerbs("GET")]
public ActionResult Add()
{
PrepareViewDataForAddAction();
return View();
}
[AcceptVerbs("POST")]
public ActionResult Add([GigBinderAttribute]Gig gig, FormCollection formCollection)
{
if (ViewData.ModelState.IsValid)
{
GigManager.Save(gig);
return RedirectToAction("Index", gig.ID);
}
PrepareViewDataForAddAction();
return View(gig);
}
Như bạn có thể thấy, khi viết dưới dạng dữ liệu của nó, Add hành động sử dụng một GigBinder (An implemenation của IModelBinder)
Trong chất kết dính này tôi có:
if (int.TryParse(bindingContext.HttpContext.Request.Form["StartDate.Hour"], out hour))
{
gig.StartDate.Hour = hour;
}
else
{
bindingContext.ModelState.AddModelError("Doors", "You need to tell us when the doors open");
}
Mẫu đơn này có một hộp văn bản với id "StartDate.Hour".
Như bạn có thể thấy ở trên, các kiểm tra GigBinder để thấy rằng người dùng đã nhập vào một số nguyên vào hộp văn bản có id "StartDate.Hour". Nếu không, lỗi mô hình sẽ được thêm vào mô hình bằng cách sử dụng AddModelError.
Vì tài sản biểu diễn gigs.StartDate.Hour được nhập mạnh, tôi không thể đặt giá trị của nó thành, ví dụ: "TEST" nếu người dùng đã nhập điều này vào hộp văn bản biểu mẫu.
Do đó, tôi không thể đặt giá trị của biểu diễn.StartDate.Hãy vì người dùng đã nhập chuỗi thay vì số nguyên.
Vì hành động thêm trả về chế độ xem và chuyển mô hình (trả về dạng xem (gig);) nếu mô hình không hợp lệ, khi biểu mẫu được hiển thị lại với xác thực mssages, giá trị "TEST" không được hiển thị trong hộp văn bản. Thay vào đó, nó sẽ là giá trị mặc định của gig.StartDate.Hour.
Làm cách nào để giải quyết vấn đề này? Tôi thực sự bị mắc kẹt!