需要保持数据不会在控制器中变为null

时间:2013-03-05 17:50:20

标签: c# asp.net-mvc

我从第三方获得一个带有List的对象,所以我无法设置构造函数。 我有两个ActionResult,一个从第三方获取对象,另一个由jquery自动完成使用。

我无法找到一种方法来设置List并防止它在下一个ActionResult中不为空...

public class MyController : Controller
{
  public List<T> myList;

  public ActionResult CallToGetThirdPartList(ThirdPartyObject obj)
  {
    list = obj.SpecialList;
    return View(obj); //important 
  }
  public ActionResult Search(ThirdPartyObject obj) //gets called from jquery 
  {
     var results = from m in myListist   //this is null
                   where m.Title.StartsWith(term)  
                   select new { label = m.Summary, m.id };  

            return Json(results, JsonRequestBehavior.AllowGet)
  }
}

2 个答案:

答案 0 :(得分:1)

对于每个HTTP请求,都会创建一个全新的控制器实例。这意味着,如果您在一个请求中初始化myList,那么您将获得MyController的全新实例,用于未初始化myList的下一个请求。

如果您需要在请求之间存储数据,请使用Session(针对用户特定数据)或Cache(针对网站范围内的数据,例如查找列表)。

答案 1 :(得分:0)

您需要稍微更改一下代码。

public class MyController : Controller
{
public List<T> myList;

 public ActionResult CallToGetThirdPartList(ThirdPartyObject obj)
 {
   list = obj.SpecialList;
   Session["list"] = list;
   return View(obj); //important 
 }
 public ActionResult Search(ThirdPartyObject obj) //gets called from jquery 
 {
   var listFromSession = Session["list"] as List<T>;
   var results = from m in listFromSession   //this is null
               where m.Title.StartsWith(term)  
               select new { label = m.Summary, m.id };  
        Session["result"]=results ;
        return Json(results, JsonRequestBehavior.AllowGet)
 }
 }

我希望这应该有所帮助。

问候 成员Parminder