ASP.NET MVC - 有没有办法模拟ViewState?

时间:2009-03-21 15:45:56

标签: asp.net asp.net-mvc session viewstate state-management

我有以下情况......在某个视图中,用户必须选择初始小时,最后一小时和工作日。但是,我无法将此信息保存到DB中,因为我需要保存整个页面,我需要主表的主键,但这不是重点。

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

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

有谁知道怎么做?有谁知道如何使用cookie或Session ??暂时保存这些数据

谢谢!

4 个答案:

答案 0 :(得分: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的序列化。您可能也想考虑这一点。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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