Шаблон составного проектирования с редактором дерева пользовательского интерфейса MVCC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Гость
 Шаблон составного проектирования с редактором дерева пользовательского интерфейса MVC

Сообщение Гость »


Кто-нибудь из вас когда-нибудь создавал редактор пользовательского интерфейса MVC RuleEngine с составным шаблоном в .NET Core?

Как ты это сделал? Я изо всех сил пытаюсь отобразить это дерево и сделать его привязываемым к модели для контроллера, пытаясь сохранить изменения в базе данных в XML.

@edit

Я пытался создать эту специальную связку моделей, но она не работает :P

публичный класс CustomBinder: IModelBinder { общедоступная задача BindModelAsync (ModelBindingContextbindingContext) { если (bindingContext == null) { бросить новое ArgumentNullException(nameof(bindingContext)); } вар modelType = привязкаContext.ModelType; если (типмодели.IsAbstract) { вар ModelName = привязкаContext.ModelName; var valueProviderResult =bindingContext.ValueProvider.GetValue(modelName + ".ClassName"); если (valueProviderResult != ValueProviderResult.None) { вар modelTypeName = valueProviderResult.FirstValue; тип var = modelType.Assembly.GetTypes().SingleOrDefault(x => x.IsSubclassOf(modelType) && x.Name == modelTypeName); если (введите != ноль) { Экземпляр FilterRule = Activator.CreateInstance(type) как FilterRule; привязкаКонтекст.Результат = ModelBindingResult.Success(экземпляр); } еще { bindingContext.Result = ModelBindingResult.Failed(); } } } вернуть Задача.ЗавершеннаяЗадача; } } Экземпляр создается активатором, но он не привязан к объекту prop модели. Есть идеи?

@Edit2

Вот как я зарегистрировал Binder:

builder.Services.AddControllers(o => { o.ModelBinderProviders.Insert(0, новый CustomModelBinderProvider()); }); Это мое действие контроллера:

[HttpPost] общедоступное обновление IActionResult (модель RuleModel) { пытаться { RuleService.Update(модель); вернуть просмотр(); } поймать (Исключение ex) { вернуть StatusCode(500, ex); } } Это RuleModel:

публичный класс RuleModel { общественный ИНТ Id {получить; набор; } общедоступная строка Имя {get; набор; } общедоступная строка Описание {get; набор; } [NotMapped] общедоступное правило фильтра FilterRule { получать { if (!string.IsNullOrWhiteSpace(this.FilterRuleRaw)) { return HtmlHelpers.Deserialize(this.FilterRuleRaw, typeof(BaseAbstractClass)); } еще вернуть ноль; } набор { this.FilterRuleRaw = HtmlHelpers.Serialize(this.FilterRule, typeof(BaseAbstractClass)); } } общественная строка FilterRuleRaw {get; набор; } [NotMapped] общедоступный список EffectRule { получать { if (!string.IsNullOrWhiteSpace(this.EffectRuleRaw)) return JsonConvert.DeserializeObject(this.EffectRuleRaw); еще вернуть ноль; } набор { this.EffectRuleRaw = JsonConvert.SerializeObject(this.EffectRule, typeof(BaseAbstractClass), Formatting.None, new JsonSerializerSettings()); } } общедоступная строка? EffectRuleRaw {получить; набор; } общественный bool IsEnabled {получить; набор; } общественный DateTime DateChanged {получить; набор; } общественный ИНТ RuleSetId {получить; набор; } общедоступный виртуальный RuleSetModel RuleSet {get; набор; } } Здесь у вас есть пары «ключ-значение» тела запроса:
[ { "ключ": "Идентификатор", "значение": "14" }, { "key": "RuleSetId", "значение": "9" }, { "ключ": "Имя", "value": "Новое правило" }, { "ключ": "Описание", "значение": "123" }, { "ключ": "Включено", «значение»: «истина» }, { "key": "FilterRule.ClassName", "value": "FilterRuleMethodLogicalAnd" }, { "key": "__RequestVerificationToken", "value": "CfDJ8C7XVp-U3ThBoklDaiDPi9n3-Y8WpuXvSu52ewI-x0BJSHaoOn1aOhKKf2BfqSqbYLxVXqNESQcFunzeIRgo5B2i2oTIteCZORnY8zoY6wR7l1Uimb-qO1uOtpUn13MfhUN5UOfuQ 9J4PS0ETorLxeY" }, { "ключ": "Включено", «значение»: «ложь» } ]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»