9

我有以下情况... 在某个View中,用户必须选择开始时间、结束时间和工作日。但是,我无法将这些信息保存到数据库,因为我需要保存整个页面并且我需要主表的主键,但这不是重点。

所以,虽然我没有将这些数据保存到数据库中,但我正在保存到会话中。我被告知要保存到 cookie,但似乎 cookie 有大小限制。所以,我正在保存到一个会话。

Buuuut,我还被告知我可以将这些信息(小时和工作日)保存到用户页面,模拟 ASP.NET ViewState...

有谁知道如何做到这一点??有谁知道如何在不使用 cookie 或 Session 的情况下临时保存这些数据?

谢谢!!

4

4 回答 4

20

隐藏的输入字段没有帮助?

<%= Html.Hidden(...) %>

更新(将对象序列化为 base64):

var formatter = new BinaryFormatter();
var stream = new MemoryStream();
formatter.Serialize(stream, myObject); // myObject should be serializable.
string result = Convert.ToBase64String(stream.ToArray());

当你想取回它时:

var formatter = new BinaryFormatter();
var stream = new MemoryStream(Convert.FromBase64String(hiddenFieldValue));
var myObject = (MyObjectType)formatter.Deserialize(stream);

确保在使用字段时验证存储在字段中的数据,因为客户端可能会更改它。ViewState自动处理这个。

旁注: ASP.NET 使用LosFormatter而不是BinaryFormatter序列化ViewState,因为它更有效或基于 ASCII 的序列化。您可能也想考虑这一点。

于 2009-03-21T15:48:30.220 回答
3

TempData["MyData"],请注意,这只会持续一次往返。

于 2009-03-21T23:56:26.710 回答
0

您可以在客户端上保存一个 javascript 数组......然后在用户最终保存时传输所有信息。

你必须多做一点工作,但最终它会得到回报。

我大量使用jQuery来做这样的事情,它比看起来更容易。

于 2009-03-21T15:59:31.910 回答
0

如果您只想保存该请求和下一个请求的数据,我建议使用 Tempdata,否则我建议使用 Mehrdad 的答案。

于 2009-03-21T16:15:23.463 回答