Как проверить истинное логическое значение, а затем установить все остальные значения в false в моем веб-приложении MVC? - PullRequest
0 голосов
/ 21 июня 2019

У меня есть приложение по прокату автомобилей, я перечисляю все текущие наймы, которые происходят в данный момент.Один автомобиль может иметь несколько прокатов, но одновременно может быть активен только один прокат.Чтобы добиться этого, у нас есть столбец с именем active, который принимает логическое значение true или false, это делается с помощью флажка в моей форме.

@Html.CheckboxFor(m => m.Active)

Что я хотел бы сделать, так это ввести проверку всякий раз, когдадобавлена ​​новая аренда или обновлена ​​существующая.Если для этого конкретного обновления или дополнения установлен флаг «Актив», то для всех остальных автомобилей для этого конкретного автомобиля установлено значение «ложь».

Я не уверен, как этого добиться, я знаю, что для этого потребуетсяпоместите в контроллер, что-то вроде:

public ActionResult AddRental(ProjectRental rental)
{
    try {
            if (ModelState.IsValid) {
                if (rental.Active == true) {
                    //do something here to set the flags.
                    //var rentalActiveCheck = uow.RentalRepository.Get().Any(x => x.Active == payload.Active && x.CarID == payload.CarId);
                }
                uow.RentalRepository.Insert(rental);
                uow.Save();
            }
        }
        catch (DataException dex)
        {
            Console.WriteLine(dex);
            ModelState.AddModelError(string.Empty, "Unable to save changes. Try again.");
        }
        return RedirectToAction("Index", "Home");
    }
}

Аналогичный метод будет использоваться для обновления, я думаю.Таким образом, чтобы подвести итог, всякий раз, когда добавляется период проката для конкретного автомобиля или обновляется существующий период, для которого активный флаг установлен в «истина», другие записи устанавливаются в «ложь».Это делается для того, чтобы гарантировать, что в определенный момент времени существует только один активный прокат автомобилей.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 21 июня 2019

Вы на правильном пути. После того, как у вас есть список активных арендных плат, вы можете обновить поле за один шаг:

var rentalActiveList = uow.RentalRepository.Get().Any(x => x.Active == payload.Active && x.CarID == payload.CarId);
rentalActiveList.ForEach(r => r.Active = false);
...
uow.Save();

При обновлении вам нужно будет исключить текущую аренду из списка, добавив что-то вроде && x.RentalID != rental.RentalID

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...