【问题标题】:ASP.NET MVC losing controller variable dataASP.NET MVC 丢失控制器变量数据
【发布时间】:2020-01-14 23:41:56
【问题描述】:

我正在使用 .NET Core MVC,但遇到了问题。下面的 temp 变量会丢失其数据。运行 Index 操作时,临时变量正常保存和存储数据,当我调用 GetOptions 操作时,它显示其为空。

private List<tempObject> temp;

public IActionResult Index([DataSourceRequest] DataSourceRequest request, FilterOptions filterOptions)
{
    temp = spAccessLayer.GetTempOptions(filterOptions, UserProfile.GetID());

    return View();
}

public IActionResult GetOptions()
{
    return Json(temp);
}

【问题讨论】:

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


【解决方案1】:

HTTP 和 MVC 是无状态的,或者换句话说,数据不会在请求之间持久化。

.NET 有模仿状态的方法;您可以根据需要使用TempDataSession

TempData 将在被清除之前持续存在 1 个 HTTP 请求,而 Session 将持续存在整个用户会话。

一个使用TempData的例子:

private IEnumerable<tempObject> temp
{
    get => TempData["temp"] as IEnumerable<tempObject>;
    set => TempData["temp"] = value;
}

另一种方法是将您的列表传递给您的视图,然后使用隐藏字段发回您的控制器。

【讨论】:

    【解决方案2】:

    我认为您需要为每个单独的请求重置它。 Index 的 Get 请求与 GetOptions 的 get 请求不同。

    private List<tempObject> temp;
    
    public IActionResult Index([DataSourceRequest] DataSourceRequest request, FilterOptions filterOptions)
    {
        temp = spAccessLayer.GetTempOptions(filterOptions, UserProfile.GetID());
    
        return View();
    }
    
    public IActionResult GetOptions()
    {
        temp = spAccessLayer.GetTempOptions(filterOptions, UserProfile.GetID());
        return Json(temp);
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用Session 跨请求存储数据。类似的东西:

      public IActionResult Index([DataSourceRequest] DataSourceRequest request, FilterOptions filterOptions)
      {
          Session[someKey] = spAccessLayer.GetTempOptions(filterOptions, UserProfile.GetID());
      
          return View();
      }
      
      public IActionResult GetOptions()
      {
          return Json(Session[someKey]);
      }
      

      但区别在于您需要跟踪someKey,这只是您提供的唯一字符串。 Session 在基本用法上有点像Dictionary&lt;string, object&gt;,供参考。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-01
        • 2012-05-14
        • 2012-10-18
        • 1970-01-01
        相关资源
        最近更新 更多