public ActionResult CreateNewValve(CreateNewValve_VM model)
        {
            //валидация введенных пользователем данных
            ModelState.Clear();
            //диаметр должен быть в пределах 15 - 200 либо не введен вообще
            int intDy = 0;
            try
            {
                if (model.Dy != null)
                {
                    intDy = Int32.Parse(model.Dy); //если введена фигня, то не распарсит
                    if (intDy<15 || intDy>200)
                    {
                        ModelState.AddModelError("DyError", "Введен недостоверный Дy!");
                    }
                }

            }
            catch
            {
                ModelState.AddModelError("DyError", "Введен недостоверный Дy!");
            }
            //Kv должен быть в пределах 0,1 - 450 либо не введен вообще
            double doubleKv = 0;
            try
            {
                if (model.Kv != null)
                {
                    string stringKv = model.Kv.Replace('.', ','); //для того, чтобы пользователь имел возможность вводить и через точку и через запятую
                    doubleKv = Double.Parse(stringKv); //если введена фигня, то не распарсит
                    if (doubleKv <= 0.1 || doubleKv > 450)
                    {
                        ModelState.AddModelError("KvError", "Введен недостоверный Kv!");
                    }
                }

            }
            catch
            {
                ModelState.AddModelError("DyError", "Введен недостоверный Kv!");
            }
            //год производства должен быть в пределах 1980 - н.в. либо не введен вообще
            int intYear = 0;
            try
            {
                if (model.ProdYear != null)
                {
                    intYear = Int32.Parse(model.ProdYear); //если ввели совсем уж хуйню, то не распарсит
                    if (intYear < 1980 || intYear > DateTime.Now.Year)
                    {
                        ModelState.AddModelError("DateError", "Введен недостоверный год!");
                    }
                }
            }
            catch
            {
                ModelState.AddModelError("DateError", "Введен недостоверный год!");
            }

            //проверяем длину инвентарного номера и заводского номера - должны быть меньше 30 символов
            if ((model.InvNo != null && model.InvNo.Length > 30) || (model.SerialNo != null && model.SerialNo.Length > 30))
            {
                ModelState.AddModelError("DateError", "Ошибка: слишком длинный номер!");
            }

            //проверяем длинну примечания, должна быть не менее 1000 символов
            if (model.Comment != null && model.Comment.Length > 1000)
            {
                ModelState.AddModelError("ExtError", "Слишком длинное примечание!");
            }

            //конец валидации

            if (ModelState.IsValid)
            {
                //валидация успешна создаем и сохраняем в БД новый экземпляр Valve
                Valve newValve = new Valve
                {
                    V_model = model.ModelName,
                    V_comment = model.Comment,
                    V_invNo = model.InvNo,
                    V_ownerEnterprise = model.Enterprise,
                    V_serNo = model.SerialNo
                };

                if (model.Dy != null) newValve.V_diam = intDy;
                if (model.Kv != null) newValve.V_KV = doubleKv;
                if (model.ProdYear != null) newValve.V_prodDate = new DateTime(intYear, 1, 1);

                int valveNewID = 0;//номер нужен для привязки КЗР к системе
                try
                {
                    valveNewID = repositorie.SaveValve(newValve);
                }
                catch (Exception e)
                {
                    //сохранить не удалось
                    ModelState.AddModelError("err", e.Message);
                    ModelState.AddModelError("err", "Не удалось создать КЗР!");
                }

                //если в модель ранее передана системы, значит сохраненный КЗР надо сразу привязать к этой системе
                if (model.ASystemNo!=null&&ModelState.IsValid)
                {
                    ASystem system = repositorie.Asystems.SingleOrDefault(aS=>aS.AS_ID==model.ASystemNo);
                    system.AS_Valve = valveNewID;

                    try
                    {
                        repositorie.SaveASystem(system);
                    }
                    catch (Exception e)
                    {
                        //привязать не удалось
                        ModelState.AddModelError("err", e.Message);
                        ModelState.AddModelError("err", "Не удалось смонтировать КЗР на систему!");
                    }
                }
            }

            if (ModelState.IsValid)
            {
                //все операции успешны, возвращаем страницу из которой был вызов на создание нового КЗР
                return Redirect(model.ReturnURL);
            }
            else
            {
                //операции неудачны, перегружаем страницу
                if (model.ASystemNo != null) model.ASystem = repositorie.Asystems.SingleOrDefault(aS => aS.AS_ID == model.ASystemNo);
                model.Enterprises = repositorie.Enterprises;
                return View(model);
            }
        }
 public ActionResult CreateNewValve(string returnURL, System.Nullable<int> asystemNo = null)
 {
     CreateNewValve_VM model = new CreateNewValve_VM
     {
         ASystemNo = asystemNo,
         Enterprise = uRepositorie.Users.SingleOrDefault(u => u.Name == System.Web.HttpContext.Current.User.Identity.Name).Enterprise,
         Enterprises = repositorie.Enterprises,
         ReturnURL = returnURL
     };
     if(asystemNo!=null) model.ASystem = repositorie.Asystems.SingleOrDefault(aS=>aS.AS_ID==asystemNo);
     return View(model);
 }