我想使用Controller类中的方法填充对象。所以我在Controller类中创建了对象,然后尝试使用类中的方法填充它。但这不起作用,因为每次调用控制器中的方法时,都会重新启动整个Controller类。每次我尝试填充对象时,我都会得到一个全新的对象。但是,我不知道如何创建一个对象并填充它。我已添加以下代码。我正在谈论的对象是ProcessModel
。忽略我在课程顶部创建的其他对象。
控制器:
public class HomeController : Controller
{
ProcessModel pm = new ProcessModel();
RetrievePatterns pt = new RetrievePatterns();
RetrieveModel rm = new RetrieveModel();
public IActionResult Index()
{
FindPatterns fp = new FindPatterns(rm.pm, pt.KpiPatterns);
ViewData["KPIs"] = fp.passdata;
return View();
}
[HttpPost]
public IActionResult AddEvent([FromBody] Event data)
{
data.ID = pm.EventObjects.Count + 1;
pm.EventObjects.Add(data);
return Json(pm.EventObjects.Count);
}
[HttpPost]
public IActionResult AddProcessName(string data)
{
pm.ID = 1;
pm.Name = data;
return Json(new { title = pm.Name });
}
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}
public IActionResult Contact()
{
ViewData["Message"] = "Your contact page.";
return View();
}
public ActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
对象:
public class ProcessModel
{
public List<Event> EventObjects = new List<Event>();
public List<Entity> EntityObjects = new List<Entity>();
public int ID { get; set; }
public string Name { get; set; }
}
答案 0 :(得分:1)
您可以创建一个Singleton
类,该类负责仅从Process
模型创建一个实例;
public class ProcessModelSingleton
{
private static ProcessModel _processModel = new ProcessModel();
private ProcessModelSingleton()
{
}
public static ProcessModel Instance
{
get { return _processModel; }
}
}
然后在控制器中为其分配一个全局变量;
ProcessModel pm = ProcessModelSingleton.Instance;
修改强>
由所有用户共享的单例类创建实例。因此,如果您想使其与用户相关,则使用Session
是最佳选择。
public ProcessModel pm {
get
{
if (Session["ProcessModel"] == null)
{
Session["ProcessModel"] = new ProcessModel();
}
return (ProcessModel)Session["ProcessModel"];
}
}
答案 1 :(得分:1)
请记住,静态变量在该Web服务器的所有用户之间共享。因此,一个用户的请求填充到单个类中的数据可以被不同用户的请求读取/覆盖。这可能就是你所追求的,但如果没有,你应该研究会话状态。
ASP.NET Session State Overview
由于HTTP本质上是无状态的,因此不鼓励使用会话来支持我的Microsoft for Asp.NET。默认情况下,它们只对创建它们的Web服务器可见,因此如果您使用的是服务器场,则需要查看具有负载均衡器或超出proc状态的服务器关联(也称为粘性会话)(例如SQL Server或NCACHE)。
理想情况下,您的应用程序设计应该避免会话的需要,并通过cookie和/或查询字符串在请求之间仅携带必要的数据。但是对于更复杂的应用程序,这通常是不可能的,因此使用会话状态。