【问题标题】:Is there a way to prevent null object errors from complex objects when the page is refreshed?有没有办法在页面刷新时防止复杂对象出现空对象错误?
【发布时间】:2020-03-17 13:29:44
【问题描述】:

我有一个控制器动作,它使用 TempData 从另一个动作中获取复杂对象。当用户刷新页面并在视图上出现空对象错误时,就会出现此问题。复杂对象不像其他值那样通过 URL 传递。有没有办法防止这种情况发生?另一种解决方案是在页面刷新时从 URL 中删除所有查询参数,并像显示新对象一样显示视图。

控制器

public IActionResult Daily(Daily daily)
{
    new ReportDaily().GetAvailableSavedCriteria(out List<ReportCriteria> reportCriteria, out Notification not);

    if (daily.SelectedCriteria == null) {
        //Create daily report object and initialize the default values
        var newModel = new Daily
        {
            PaymentTypes = DGetPaymentTypes(),
            Users = DGetUsers(),
            Criteria = reportCriteria,
            StartDate = DateTime.Today.Date,
            EndDate = DateTime.Today.Date,
            County = true,
            Municipality = true
        };
        return View(newModel);
    }
    else
    {
        daily.PaymentTypes = TempData.Get<List<Daily.PaymentType>>("PaymentTypes") == null ? DGetPaymentTypes() : TempData.Get<List<Daily.PaymentType>>("PaymentTypes");
        daily.Users = TempData.Get<List<Daily.User>>("Users") == null ? DGetUsers() : TempData.Get<List<Daily.User>>("Users");
        daily.Criteria = reportCriteria;
        return View("Daily", daily);
    }
}

【问题讨论】:

标签: c# asp.net-mvc asp.net-core


【解决方案1】:

TempData 只用于单次重定向,为了保留刷新后其他动作的数据,可以使用Session来实现。

要在core mvc中使用Session,需要在starup.cs文件中添加如下代码:

  • 在 ConfigureServices 方法中添加services.AddSession();
  • 在配置方法中添加app.UseSession();

要在Session中保存复杂对象,可以将list对象转成json格式存储,拿到后反序列化为list对象。

HttpContext.Session.SetString("PaymentTypes", JsonConvert.SerializeObject(pamentTypeList));

每日行动:

//.....

daily.PaymentTypes = HttpContext.Session.GetString("PaymentTypes") == null ? DGetPaymentTypes() : JsonConvert.DeserializeObject<List<Daily.PaymentType>> (HttpContext.Session.GetString("PaymentTypes"));

【讨论】:

  • 这正是我所需要的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多