我可以利用ViewState来消除传递查询字符串的需要吗?

时间:2009-07-30 13:08:32

标签: c# asp.net viewstate

我有一个包含多个可扩展列表的页面。在一个完美的世界中,我想显示每个列表的链接,当点击一个列表时,它将重新加载显示该特定列表的页面。我读到ViewState可以消除对隐藏输入字段,查询字符串等的需要,但我不熟悉这个概念。

基本上我需要完成两件事:

  1. 单击链接时向ViewState obj添加列表ID
  2. 加载页面时从ViewState obj读取ID,显示该列表
  3. 有人能为我提供一些资源和/或有关此主题的帮助吗?谢谢!

2 个答案:

答案 0 :(得分:2)

ViewState本质上是一个长编码的隐藏字段,存储在页面顶部。它与常规隐藏字段之间的主要区别在于ASP .NET将对其进行解码并在回发时自动解析它。

有更好的方法可以实现您想要做的事情。

  • 您可以使用查询字符串。你传递的只是一个列表ID。将列表ID附加到链接的末尾,并在Page_Load上查找。如果找到,请加载相应的列表。您将需要处理未传递列表ID的情况。 查询字符串不是邪恶的。它可以极大地帮助减少页面重量。当与一个体面的 URL重写器一起使用时,你可以很好地控制传递的内容(至关重要的是,什么不是)
  • 如果使用ASP .NET控件(例如Button或LinkBut​​ton)来触发列表的显示,则可以设置CommandArgument属性并在事件代码中选择它。然后,您可以将此作为参数传递给任何方法,或者Control正在处理列表呈现。

答案 1 :(得分:1)

ViewState用于在回发之间存储单个页面上的信息,而不是在页面之间传递参数。

您可以使用以下命令在页面之间传递参数:

  1. 会话
  2. 查询字符串
  3. 缓存
  4. 自定义数据库
  5. 跨页回发
  6. 这些方法都不会自动将数据添加到所请求页面的ViewState中。其中,我认为只有#2适用于直接HTML链接(GET),其余通常涉及回发(POST)。

    在请求的页面中,您总是需要某种ViewState setter( ViewState [“Id”] = source.Id )。

    How to: Pass Values Between ASP.NET Web Pages