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("", "Ошибка: примечание слишком длинное!");
            }
        }