Проверьте, есть ли у модели данные в представлении - PullRequest
0 голосов
/ 03 июня 2018

ВОПРОС

Как безопасно и эффективно проверить, заполнена ли модель представления данными, в самом представлении?

ОБЪЯСНЕНИЕ

Я передаю модель в представление, похожее на это;

return View(response.Success ? (SalesDashboardViewModel)response.Model : new SalesDashboardViewModel());

Теперь у представления либо есть полностью заполненная модель представления со всеми данными.или, если модель представления не была заполнена правильно, у нее может быть пустое «SalesDashboardViewModel».Если второй случай верен, то, когда я, например, вызову @Model.CountOfUsers в представлении, я получу ошибку null object reference.

Как, в представлении, я буду проверять, является ли это пустым илинет, кроме проверки, является ли одно из его свойств нулевым (из-за того, что свойства могут измениться).

ПЕРЕКЛЮЧЕНИЕ ПОЛНОГО КОДА

// Контроллер

public ActionResult SalesDashboard(){
    var response = DashboardService.BuildSalesViewModel(User.Identity.GetUserId());
    return View(response.Success ? response.Model : new SalesDashboardViewModel());
}

// Заполнение SalesDashboardViewModel

public CustomResponseModel BuildSalesViewModel(string userId)
    {
        try
        {
            CustomResponseModel response;
            var vm = new SalesDashboardViewModel();
            response = GetCountOfSuspectsAddedThisMonth(userId);
            vm.NoSuspectsAddedThisMonth = response.Success ? (int)response.Model : throw new Exception(response.Reason);
            response = GetCountOfProspectsAddedThisMonth(userId);
            vm.NoPropectsAddedThisMonth = response.Success ? (int)response.Model : throw new Exception(response.Reason);
            response = GetCountOfCustomersNotContactedRecently(userId, 12);
            vm.NoCustomersNotContactedRecently = response.Success ? (int)response.Model : throw new Exception(response.Reason);
            response = GetTopProspects(userId, 10);
            vm.TopProspects = response.Success ? (List<Prospect>)response.Model : throw new Exception(response.Reason);
            return new CustomResponseModel { Success = true, Model = vm };
        }
        catch (Exception e)
        {
            return new CustomResponseModel
            {
                Success = false,
                Reason = e.Message,
            };
        }
    }

Если есть лучший способ сделать это, тогда я открыт для предложений.Я ценю помощь:)

1 Ответ

0 голосов
/ 03 июня 2018

Вы можете использовать оператор безопасной навигации (?.) Для доступа к свойствам, если вы не уверены, что они будут иметь значение.

@Model?.CountOfUsers

Подробнее см. здесь .

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