public ActionResult ControllerCorrect(ControllerCorrect_VM model) { ValidateControllerCorrect_VM(model, ModelState); if (ModelState.IsValid) { //валидация успешна: пробуем сохранить контроллер в БД HSA.Domain.BD.Controller tempC1 = dataRepository.Controllers.FirstOrDefault(c => c.C_ID == model.CID); tempC1.C_modelNo = model.ModelNo; tempC1.C_serNo = model.SerNo; tempC1.C_invNo = model.InvNo; tempC1.C_comment = model.Comment; if (model.ProdYear!=null) tempC1.C_prodDate = new DateTime(Int32.Parse(model.ProdYear), 1, 1); try { dataRepository.SaveController(tempC1); } catch (Exception e) { //не сохранил: имеются ошибкии БД ModelState.AddModelError("err", e.Message); } } if (ModelState.IsValid) { //все операции успешны, переходим к стадии 2 return RedirectToAction("CreporderDetails",new{cID=model.CID, returnURL = model.ReturnURL}); } else { //имеются ошибки: выводим сообщение пользователю model.Models = dataRepository.C_models; model.Controller = dataRepository.Controllers.FirstOrDefault(c=>c.C_ID==model.CID); return View(model); } }
public ActionResult ControllerCorrect(int cID, string returnURL) { HSA.Domain.BD.Controller tempC = dataRepository.Controllers.FirstOrDefault(c=>c.C_ID==cID); ControllerCorrect_VM model = new ControllerCorrect_VM { CID = cID, ModelNo = tempC.C_modelNo, SerNo = tempC.C_serNo, InvNo = tempC.C_invNo, ReturnURL = returnURL, Comment = tempC.C_comment, Models = dataRepository.C_models, Controller = tempC }; //необходимо отдельно обработать дату производства с проверкой на null if (tempC.C_prodDate != null) { model.ProdYear = ((DateTime)tempC.C_prodDate).Year.ToString(); } return View(model); }
//методы добавляют к ModelStateDictionary ошибки валидации для различных моделей void ValidateControllerCorrect_VM(ControllerCorrect_VM model, ModelStateDictionary state) { state.Clear(); //должен быть введен заводской номер if (model.SerNo == null) state.AddModelError("1", "Пожалуйста введите заводской номер!"); //должен быть введен инвентарный номер if (model.InvNo == null) state.AddModelError("2", "Пожалуйста введите инвентарный номер!"); //проверяем длину инвентарного номера и заводского номера - должны быть меньше 30 символов if ((model.InvNo != null && model.InvNo.Length > 30) || (model.SerNo != null && model.SerNo.Length > 30)) { state.AddModelError("DateError", "Ошибка: слишком длинный номер!"); } //проверяем введенный пользователем год int intYear = 0; try { if (model.ProdYear != null) //если null, то значит пользователь ничего не ввел в поле (допустимо) { intYear = Int32.Parse(model.ProdYear); //если ввели совсем уж хуйню, то не распарсит if (intYear != 0 && !(intYear > 1980 && intYear <= DateTime.Now.Year)) //год должен быть в интервале 1980 - текущий год, если год = 0 то пользователь его не указал просто { state.AddModelError("DateError", "Введен недействительный год производства!"); } } else { state.AddModelError("DateError", "Пожалуйста введите год производства!"); } } catch { //нераспарсил state.AddModelError("DateError", "Введен недействительный год производства!"); } //Предварительная проверка, что контроллер где то установлен if (!dataRepository.Asystems.Where(aS => aS.AS_Controller == model.CID).Any()) { //контроллер нигде не установлен state.AddModelError("MountError", "Контроллер не установлен ни на одном объекте!"); } //Примечание должно быть менее 1000 символов else if (model.Comment!=null&&model.Comment.Length > 1000) { state.AddModelError("", "Ошибка: примечание слишком длинное!"); } }