private ActionResult _Edit(DataProviderModel model = null, int settingId = 0) { ViewBag.StrategyInfoList = ModelHelper.GetStrategyInfoList(strategyInfoRepository); ViewBag.ConnectorInfoList = ModelHelper.GetConnectorInfoList(connectorInfoRepository); if (model != null) //повторно пришло { //IEntityInfo entityInfo = SettingHelper.GetEntityInfo(model.SettingType, model.EntityInfoId); //!!!Восстановить model.EntityInfo model.EntityParams = StrategyHelper.GetEntityParams(model.ConnectorInfo, model.EntityParams).ToList(); } else if (settingId != 0) { model = settingService.GetById(settingId); if (model == null) { TempData["error"] = String.Format("Экземпляр настройки \"{0}\" не найден!", settingId); return RedirectToAction("Index"); } } else //Запрос без параметров model = new DataProviderModel(); return View("Edit", model); }
public ActionResult Edit(DataProviderModel model, IEnumerable<ParamEntity> entityParams) { model.EntityParams = entityParams.ToList(); if (ModelState.IsValid) { //Сохранение settingService.Save(model); TempData["message"] = String.Format("Сохранены изменения в экземпляре: {0}", model.Name); return RedirectToAction("Index"); } else { return _Edit(model: model); } }
///// <summary> ///// Находит провайдер по умолчанию для стратегии ///// </summary> ///// <param name="strategyInfo"></param> ///// <returns></returns> //public static IDataProvider CreateDataProvider(StrategyInfo strategyInfo) //{ // //Найдем актуальную настройку для стратегии // Setting setting = settingRepository.Get(T=>T.Where(s => s.SettingType == SettingType.ConnectorInfo && s.StrategyInfoId == strategyInfo.Id).OrderByDescending(s => s.Priority)).FirstOrDefault(); // return CreateDataProvider(setting); //} /// <summary> /// Находит провайдер по умолчанию для стратегии /// </summary> /// <param name="connectorInfo"></param> /// <returns></returns> public IDataProvider CreateDataProvider(DataProviderModel setting) { if (setting.ConnectorInfo == null) throw new CustomException($"settingId={setting.Id}. EntityInfo is null!"); IDataProvider dataProvider = (IDataProvider)ReflectionHelper.CreateEntity(setting.ConnectorInfo); IEnumerable<ParamEntity> strategyParams = StrategyHelper.GetEntityParams<ParamEntity>(setting.ConnectorInfo, setting.EntityParams); //Применяем сохраненные параметры IEnumerable<PropertyInfo> arrayProp = ReflectionHelper.GetEntityAttributes(dataProvider); foreach (PropertyInfo prop in arrayProp) { ParamEntity savedParam = strategyParams.FirstOrDefault(p => p.FieldName == prop.Name); if (savedParam != null) { prop.SetValue(dataProvider, savedParam.FieldValue); } } return dataProvider; }