而不是Session变量,我可以在mvc中保存我的临时数据?

时间:2012-04-19 15:37:17

标签: asp.net-mvc asp.net-mvc-3 model-view-controller

我创建了一个mvc3应用程序。 目前将提交表单值保存到Session,因为我之前需要做一些事情 保存对数据库的更改。

还有其他好的方法可以在ViewState这样的mvc中存储临时数据吗?

每次输入数据时以及单击“提交”按钮时,我都会将表单输入值保存到Session变量中。

每次提交后,我都会使用新添加的值填充我的会话变量,并将所有这些值显示在webgrid中。

完成插入后,最后点击了更新按钮,该按钮从webgrid获取所有值,并作为参数传递给一个存储过程。

Now here i want to achieve 2 things
1.need to save all inserted data as clicked on submit it gets refresh all time.
so need to save all previous data to.
2.currently using session variable which sets to webgrid to show data into webgrid and once done with insertion passing those values to stored procedure.

因此需要了解保存数据的其他任何好方法。

Else can use javascript to do this all on client side.

3 个答案:

答案 0 :(得分:5)

出于两个原因,您应该避免尝试使无状态网站看起来有状态的方案。

首先,会话不会避免往返,它只是名义上不同于在数据库中存储值。是的,获取内存比从SQL获取更快但是这不能很好地扩展 - 按比例扩展(超过1个服务器),您必须添加组件和跃点,以减少增益并显着增加复杂性。

其次,会话值很可能会进入数据库,所以为什么不首先从那里开始。

第三(是的,另一个),Session不一定比隐藏的表单字段更值得信任。

13年来,我看到会话几乎全部用于错误的事情 - 开发人员为了方便起见使用会话回退,后来后悔(开发人员更换它们并且必须维护他们的代码)。

简而言之,使用数据库存储此信息,并明智地了解如何获取和缓存它。

答案 1 :(得分:2)

您可以使用TempData(http://msdn.microsoft.com/en-us/library/system.web.mvc.controllerbase.tempdata.aspx),但要知道它只会从一个请求持续到下一个请求。

TempData["someKey"] = "";

答案 2 :(得分:2)

如果你需要在帖子之间保留数据,Session就是合适的地方。如果需要将数据写入数据库,则模型应处理post上的数据。在您的控制器中:

[HttpPost]
public ActionResult Index(YourModel model)
{
    if (ModelState.IsValid)
    {
        model.SaveToDataBase();
        return View("Success");
    }
    return View("Index", model);
}

然后在模型中:

[Serializable]
public class YourModel
{
    [Required]
    public string YourData { get; set; }

    public void SaveToDataBase()
    {
         //TODO - add code to call stored procedure with data posted to model
    }
}