我仍然是一个相对菜鸟,但是我对我所做的一个小测试的结果感到惊讶。
我想在 View 状态中存储字符串列表。到目前为止,当我想要修改列表时,我从 View 状态检索它,执行 List.Add 并将其保存回 View 状态。
但是,我决定做一个简单的测试,如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<string> s = new List<string>();
s.Add("abc");
s.Add("def");
ViewState.Add("test", s);
s.Add("one");
s.Add("two");
}
var t = (List<string>)ViewState["test"];
foreach (var str in t)
{
Response.Write(str + "<br>");
}
}
如您所见,我创建了一个列表,将其添加到 View 状态,然后修改该列表。令我惊讶的是,即使在回发之后,列表也会在 viewstate 中被修改。
问题是,这样做是否安全,如果是的话,这是否被认为是不好的做法。
提前致谢。
最佳答案
ViewState 仅在回发时序列化到客户端页面。 在此之前,它保存在内存中并可以安全地进行编辑。
我经常使用 ViewState 作为属性的支持者:
public Class1 MyClass1
{
get { return (Class1)ViewState["MyClass1"]; }
set { ViewState["MyClass1"] = value; }
}
一般来说,我不认为这样做是不好的做法,但以下情况除外:
- 存储敏感数据 - 由于数据是序列化到客户端的,因此很容易被更改。
- 大量数据 - 由于数据会持久保存到客户端,因此大量数据会显着增加页面加载时间。
关于asp.net - 修改 View 状态中的项目 - 这样做安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17999226/