Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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#_Asp.net_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 在asp.net MVC中,我应该将临时视图模型存储在哪里?

C# 在asp.net MVC中,我应该将临时视图模型存储在哪里?,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我创建了一个页面,用户可以在其中从随机问题中选择答案 控制器包含 public class TestController : Controller { private DBDataContext _context; private HomeViewModel _model; public TestController() { _context =

我创建了一个页面,用户可以在其中从随机问题中选择答案

控制器包含

 public class TestController : Controller
        {

            private DBDataContext _context;
            private HomeViewModel _model;

            public TestController()
            {
                _context = new DBDataContext();
                _model = new HomeViewModel();
            }

            // GET: Test 
            [Route("test-online")]
            public ActionResult Index()
            {
                _model = new HomeViewModel()
                {
                    Categories = _context.Categories.Select(x => x.ToCategories()).ToList(),
                    QuestionModel = new List<QuestionModel>()
                };

                ViewData.Model = _model;

                return View(_model);
            }

            [HttpPost]
            public void Go(Test t)
            {
                _model = (HomeViewModel)ViewData.Model;
            }

            protected override void Dispose(bool disposing)
            {
                if (disposing)
                {
                    if (_context != null)
                    {
                        _context.Dispose();
                        _context = null;
                    }
                }
                base.Dispose(disposing);
            }
}
公共类TestController:Controller
{
私有DBDataContext _context;
私有HomeViewModel _模型;
公共测试控制器()
{
_context=new DBDataContext();
_model=新的HomeViewModel();
}
//获取:测试
[路线(“在线测试”)]
公共行动结果索引()
{
_模型=新的HomeViewModel()
{
Categories=\u context.Categories.Select(x=>x.ToCategories()).ToList(),
QuestionModel=新列表()
};
ViewData.Model=\u Model;
返回视图(_模型);
}
[HttpPost]
公共无效Go(测试t)
{
_model=(HomeViewModel)ViewData.model;
}
受保护的覆盖无效处置(布尔处置)
{
如果(处置)
{
如果(_context!=null)
{
_context.Dispose();
_上下文=空;
}
}
基地。处置(处置);
}
}
问题是我应该把我的
\u模型存放在哪里

当用户选择答案时,会在
Go
方法上执行ajax post, 但不幸的是,
ViewData.Model
现在是
null

如何解决此问题?
由于我不想使用公共静态属性,因此我尝试了使用
ViewBag
ViewData

如果您临时保存模型以在其他方法中使用它,则应改用TempData

使用TempData代替Index方法中的ViewData。例:

TempData["myModel"] = _model;
您可以在Go方法中使用

_model = TempData["myModel"];
请记住,TempData将只保存一个请求的数据。如果您希望数据为多个请求保留,则需要使用TempData.peek和TempData.keep。你可以从下面的链接中找到它


您可以通过
会话
保留您的模型,如以下代码所示

//设置模型和会话的部分

var _model = new HomeViewModel()
{
    Categories = _context.Categories.Select(x => x.ToCategories()).ToList(),
    QuestionModel = new List<QuestionModel>()
};
Session["model"] = _model;
HomeViewModel model = null;
if(Session["model"] != null)
{
    model = Session["model"] as HomeViewModel;
    // your code here
}

在应用程序池重置情况下,可以做些什么以不丢失会话数据

会话状态在PROC
模式下工作,默认情况下,该模式将会话状态存储在Web服务器的内存中,为了在应用程序池重置时不丢失会话变量,您可以将状态模式更改为
StateServer
SQLServer
,这提供了一种在重新启动Web应用程序时保留会话状态的解决方案


详细信息参考:

我应该问一下应用程序池重置时的数据会发生什么情况吗?当您深入了解TempData的工作原理时,它只不过是存储在会话中的一个易腐对象。因此,当您使用TempData时,如果您的应用程序池被重新设置或重置,数据可用性将完全取决于您使用的状态管理技术。。。@hsnbl在其评论中所说的内容也适用于这种情况。我是否应该询问应用程序池重置时的数据会发生什么情况?对于应用程序池重置情况,我建议更改会话状态模式。参考: