C# ASP.NET MVC丢失控制器变量数据
我正在与.NET核心MVC合作,我遇到了一个问题。下面的temp变量将丢失其数据。当运行Index操作时,temp变量通常保存和存储数据,当我调用GetOptions操作时,它显示为nullC# 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
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,它将创建一个新的控制器来处理该请求。控制器不可重复使用。一旦请求处理管道结束,您在专用字段中设置的值将丢失。请参阅