tôi định nghĩa một biến nhưASP.MVC3 ModelState.IsValid không bao gồm RemoteAttribute kiểm tra
public class EditModel
{
[Remote("IsNameAvailable", "Home", ErrorMessage = "Name is in use.")]
[Display(Name = "Name")]
public string Name{ get; set; }
}
và trong bộ điều khiển Trang chủ
public JsonResult IsNameAvailable(string name)
{
if (duplicate)
return Json(false, JsonRequestBehavior.AllowGet);
else
return Json(true, JsonRequestBehavior.AllowGet);
}
nhưng khi tôi kiểm tra ModelState.IsValid trong Lưu hành động, nó luôn luôn trả về true ngay cả khi tôi có thể thấy hiển thị thông báo lỗi trên View.
public ActionResult Save(EditModel editModel)
{
if (!ModelState.IsValid)
{
//Return to view and display error in view
return View("Home", editModel);
}
//Input data is valid and save record
Repository.Save(editModel.Name);
}
[Vấn đề]
Làm thế nào có thể kiểm tra ModelState cũng là Validation rules bởi RemoteAttribure trong một mô hình?
Cảm ơn bạn đã đề xuất! Trường hợp là tôi có nhiều mô hình như vậy và tôi muốn tìm tùy chọn tốt nhất để giảm mã. Các tùy chọn đầu tiên và thứ hai cần mã phụ thuộc vào số lượng mô hình sử dụng thuộc tính từ xa. Bạn có thể giải thích thêm về tùy chọn cuối cùng không? – daniel
Phương pháp IsValid của RemoteAttribute thực sự được gọi là serverside. Nếu bạn nhìn vào phương thức này với trình giải mã .NET, bạn sẽ thấy rằng tất cả phương thức này thực hiện là "trả về true;". Tạo thuộc tính của riêng bạn có nguồn gốc từ RemoteAttribute và đặt một số logic xác nhận thực tế trong phương thức IsValid() đó. Ví dụ, bạn có thể tạo một thuộc tính bổ sung trên thuộc tính của riêng bạn, hãy nói ValidationMethod. Khi sử dụng thuộc tính, bạn có thể chuyển theo phương thức cần thực hiện xác thực. Và trong phương thức IsValid() của bạn, bạn có thể gọi phương thức xác thực đó. –