Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 30.03.2017
Сообщений: 2

Использовать цикл по значению Enum(Switch)

27.08.2021, 17:08. Показов 4681. Ответов 0

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите со следующим примером.
Я использую grid от syncfusion, в котором у меня отображается BarrierId и EternalServiceEnabled. При нажатии на меню ColumnMenuItems на Выбрать всё(GridBESChooseAll) - отмечаются все checkboxes в grid и происходит отправка значений в контроллер, в методе POST, при нажатии на Отменить всё(GridBESDiscardAll) - все checkboxes отменяются и переходят в false, так же значения отправляются в контроллер. При этом страница перезагружается единожды. Я сделал выбор checkbox по отдельности: при нажатии на checkbox он принимает значение true и перезагружает страницу, но это долго и не удобно. То есть, использовать цикл по значению Enum, добавить новый EternalServices, если нет то создать новый EternalServices.

Вот мой View(_EternalService):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
@model Barrier
 
@{
    var ds = new List<EternalServiceViewModel>();
    foreach (var es in Enum.GetNames(typeof(ServiceType)))
    {
        var value = (ServiceType)Enum.Parse(typeof(ServiceType), es);
 
        var row = new EternalServiceViewModel
        {
            BarrierId = Model.BarrierId,
            EternalServiceKey = es,
            EternalServiceName = value.DisplayName(),
            EternalServiceEnabled = Model.EternalServices.Any(e => e.ServiceType == value)
        };
        ds.Add(row);
    }
    var dataSource = ds.OrderBy(e => e.EternalServiceName).ToArray();
}
 
<p>Сервисы продолжают работать, даже если у помещения дата завершения оплаченного периода меньше текущей даты, или не указана вовсе:</p>
 
@{
    List<object> columnMenuitems = new List<object>();
    columnMenuitems.Add(new { text = "Выбрать всё", id = "GridBESChooseAll" });
    columnMenuitems.Add(new { text = "Отменить всё", id = "GridBESDiscardAll" });
}
 
@(Html.EJS().Grid("GridBarrierEternalServices")
      .DataSource(dataSource).SelectionSettings(sel => { sel.PersistSelection(true); })
      .Columns(col =>
      {
          col.Field("BarrierId").Visible(false).Add();
          col.Field("EternalServiceKey").Visible(false).Add();
          col.Field("EternalServiceName").HeaderText("Сервис").ShowColumnMenu(false).Width("130").Add();
          col.Field("EternalServiceEnabled")
            .HeaderText("Неотключаемый").ShowColumnMenu(true)
            .Template("#TemplateEternalServiceEnabled")
            .Width(50).Add();
 
      })
        .ColumnMenuItems(columnMenuitems)
        .ColumnMenuClick("columnMenuClick").ShowColumnMenu(true).Render())
 
<script id="TemplateEternalServiceEnabled" type="text/x-template">
    <div id="EternalServiceEnabled" class="e-checkbox-wrapper e-css e-checkbox"
         onclick="ChangeEnableFieldsDialog($(this))">
        <span class="e-frame e-icons ${if(EternalServiceEnabled)} e-check ${/if}"></span>
    </div>
</script>
Скриншот _EternalService


Вот мой Controller( ChangeEternalService )
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> ChangeEternalService(int barrierId, string command)
        {
            try
            {
                var barrier = await _barrierRepository.Barriers.AsQueryable()
                    .Include(b => b.EternalServices)
                    .FirstOrDefaultAsync(b => b.BarrierId == barrierId);
                if (barrier == null) throw new Exception("Барьер не найден.");
 
                foreach (var aes in Enum.GetNames(typeof(ServiceType)))
                {
                    var value = (ServiceType)Enum.Parse(typeof(ServiceType), aes);
                }
 
                switch (command)
                {
                    case "GridBESDiscardAll":
                        break;
 
 
                }
                if (eternalServiceToDelete != null)
                {
                    barrier.EternalServices.Remove(eternalServiceToDelete);
                }
                else
                {
                    barrier.EternalServices.Add(new EternalService { BarrierId = barrier.BarrierId });
                }
                await _barrierRepository.SaveBarrierAsync(barrier, User.Identity.Name);
            }
            catch (Exception e)
            {
                return Json(new { Success = false, ErrorMessage = e.Message }, JsonRequestBehavior.AllowGet);
            }
 
            return Json(new { Success = true }, JsonRequestBehavior.AllowGet);
        }
То есть мне необходимо очистить коллекцию EternalServices в switch, но я не понимаю как это хорошо сделать.
Использовать цикл по значению Enum.

Мой Model(Barrier)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class BarrierType
    {
        [Key]
        public int BarrierTypeId { get; set; }
        [Display(Name = "Категория")]
        public BarrierCategory Category { get; set; }
        [Display(Name = "Имя")]
        public string Name { get; set; }
        [Display(Name = "Цикл")]
        public int OpenCloseTime { get; set; }
        public virtual ICollection<Barrier> Barriers { get; set; } = new HashSet<Barrier>();
 
    }
 
    public enum BarrierCategory : byte
    {
        [Display(Name ="Шлагбаум")]
        Barrier,
        [Display(Name = "Ворота")]
        Gate,
        [Display(Name = "Калитка")]
        Door
    }
}
Мой BarrierOpeninType
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 public class BarrierOpeningType
    {
        [Key]
        public int BarrierOpeningTypeId { get; set; }
 
        [Display(Name = "Тип")]
        public ServiceType ServiceType { get; set; }
 
        [Range(0, 300, ErrorMessage = "Поле {0} должно иметь значение от {1} до {2}.")]
        [Display(Name = "До события, сек.")]
        public int BeforeWorkLogSec { get; set; }
 
        [Range(0, 300, ErrorMessage = "Поле {0} должно иметь значение от {1} до {2}.")]
        [Display(Name = "После события, сек.")]
        public int AfterWorkLogSec { get; set; }
    }
Мой EternalService
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class EternalService
    {
        [Key]
        [Column (Order = 1)]
        [Display(Name ="Барьер")]
        public int BarrierId { get; set; }
 
        [Key]
        [Column(Order = 2)]
        [Display(Name = "Тип сервиса")]
        public ServiceType ServiceType { get; set; }
 
        public virtual Barrier Barrier { get; set; }
    }
Мой ServiceType
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public enum ServiceType : byte
    {
        [Display(Name = "Оператор")]
        Dispatcher = 0,
        [Display(Name = "Телефон")]
        Phone = 1,
        [Display(Name = "Идентификатор")]
        KeyFob = 2,
        [Display(Name = "Магнитная петля")]
        MagneticLoop = 3,
        [Display(Name = "GSM считыватель")]
        KipGsm = 4,
        [Display(Name = "Кабинет пользователя")]
        WebButton = 5,
        [Display(Name = "ПИН")]
        ResidentPin = 6,
        [Display(Name = "Распознование госномера")]
        CarScan = 7,
        [Display(Name = "Открытие в моб.приложении")]
        MobileApp = 8,
        [Display(Name = "Заявка")]
        Claim = 9,
        [Display(Name = "Охранник")]
        Guard = 10,
        [Display(Name = "Корректировка по инвентаризации")]
        Inventory = 11,
        [Display(Name = "Домофон")]
        Doorphone = 12,
        [Display(Name = "Создание заявки в моб.приложении")]
        MobileAppCreateClaim = 13
    }
Миниатюры
Использовать цикл по значению Enum(Switch)  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.08.2021, 17:08
Ответы с готовыми решениями:

Switch по enum
есть некий enum который используется как флаговый, если установлены несколько полей то одно действие или другое... я хочу пройтись свитчем...

Switch and enum
Имеется такой код public class Solution { public static enum E1 {A, B, C, Y} public static enum E2 {D, E, F} ...

Switch case и enum
делаю калькулятор с помощью switch case у меня ошибку выдает на 20 строке bool plus = false; bool minus =...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.08.2021, 17:08
Помогаю со студенческими работами здесь

Enum ломается в операторе Switch
Добрый вечер форумчане, нужен ваш бесценный совет для начинающего программиста. Есть в задании один момент, который не дает мне покоя:...

Перечисляемый тип enum + switch
Всем привет, прошу помочь разобраться, делаю структуры и все никак не могу сделать так , чтобы заработал фрагмент программы связанный с...

enum, switch/case и socket
дан enum packet { LetsPlay, StartConfirmed, StartDeclined }; далее пытаюсь его использовать void __fastcall...

Игра с использованием do while + enum + switch
Условие игры - стрелять до тех пор, пока человечек не умрет (здоровье &lt; 0) либо мы спасаем его, не давая умереть. Изначальный уровень...

Enum не читается в блоке условий (if else, switch)
Доброго дня и чистого кода всем. Пытаюсь работать в React с Enum, полученным с сервера (Spring) в качестве ответа в процессе загрузки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru