Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC丢失控制器变量数据_C#_.net Core_Asp.net Core Mvc - Fatal编程技术网

C# ASP.NET MVC丢失控制器变量数据

C# ASP.NET MVC丢失控制器变量数据,c#,.net-core,asp.net-core-mvc,C#,.net Core,Asp.net Core Mvc,我正在与.NET核心MVC合作,我遇到了一个问题。下面的temp变量将丢失其数据。当运行Index操作时,temp变量通常保存和存储数据,当我调用GetOptions操作时,它显示为null private-List-temp; 公共IActionResult索引([DataSourceRequest]DataSourceRequest请求,筛选器选项筛选器选项) { temp=spAccessLayer.GetTempOptions(filterOptions,UserProfile.GetI

我正在与.NET核心MVC合作,我遇到了一个问题。下面的temp变量将丢失其数据。当运行Index操作时,temp变量通常保存和存储数据,当我调用GetOptions操作时,它显示为null

private-List-temp;
公共IActionResult索引([DataSourceRequest]DataSourceRequest请求,筛选器选项筛选器选项)
{
temp=spAccessLayer.GetTempOptions(filterOptions,UserProfile.GetID());
返回视图();
}
public IActionResult GetOptions()
{
返回Json(temp);
}

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

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

TempData
将在清除之前在1个HTTP请求中保持,而
Session
将在整个用户会话中保持

使用
TempData
的示例:

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

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

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

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

TempData
将在清除之前在1个HTTP请求中保持,而
Session
将在整个用户会话中保持

使用
TempData
的示例:

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

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

我认为您需要为每个请求重置列表。索引的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);
}
private-List-temp;
公共IActionResult索引([DataSourceRequest]DataSourceRequest请求,筛选器选项筛选器选项)
{
temp=spAccessLayer.GetTempOptions(filterOptions,UserProfile.GetID());
返回视图();
}
public IActionResult GetOptions()
{
temp=spAccessLayer.GetTempOptions(filterOptions,UserProfile.GetID());
返回Json(temp);
}

我认为您需要为每个请求重置它。索引的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);
}
private-List-temp;
公共IActionResult索引([DataSourceRequest]DataSourceRequest请求,筛选器选项筛选器选项)
{
temp=spAccessLayer.GetTempOptions(filterOptions,UserProfile.GetID());
返回视图();
}
public IActionResult GetOptions()
{
temp=spAccessLayer.GetTempOptions(filterOptions,UserProfile.GetID());
返回Json(temp);
}
您可以使用跨请求存储数据。类似于此:

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
,这只是您提供的唯一字符串。会话在基本用法上类似于
字典
,用于参考框架。

您可以使用它跨请求存储数据。类似于此:

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
,这只是您提供的唯一字符串。会话在基本用法上类似于
字典
,作为参考框架。

您可以在ASP.Net每次收到请求时使用TempData,它会创建一个新的控制器来处理该请求。控制器不可重复使用。一旦请求处理管道结束,您在专用字段中设置的值将丢失。请参阅,您可以在ASP.Net每次收到请求时使用TempData,它将创建一个新的控制器来处理该请求。控制器不可重复使用。一旦请求处理管道结束,您在专用字段中设置的值将丢失。请参阅