0

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

有没有其他像在 mvc 中存储临时数据的好方法ViewState

每次输入数据以及单击提交按钮时,我都会将表单输入值保存到 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.
4

3 回答 3

5

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

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

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

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

在 13 年中,我看到 session 几乎完全用于错误的事情——开发人员为了方便而回归使用 session,后来又后悔了(替换它们并必须维护他们的代码的开发人员也是如此)。

简而言之,使用数据库来存储这些信息,并巧妙地了解如何获取和缓存它。

于 2012-04-19T16:34:07.027 回答
2

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

TempData["someKey"] = "";
于 2012-04-19T15:50:28.523 回答
2

如果您需要跨帖子保存数据,Session 是合适的地方。如果您需要将数据写入数据库,则模型应在发布时处理数据。在您的控制器中:

[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
    }
}
于 2012-04-19T16:20:53.350 回答