我正在处理一个ASP.NET应用程序。此应用程序的要求之一是不使用查询字符串参数。原因是客户认为它看起来很脏而且不专业。此外,也不能使用会话变量。为了克服这些挑战,我决定使用runat =“server”隐藏的html元素。
挑战在于,页面被重定向到自身。原因是页面代表10页列表中的模板。如果用户单击“下一步”,则应用程序需要更新第二页的信息。如果用户点击“上一个”,则需要进行相反的操作。
如何读取/设置隐藏的HTML字段,以便我可以在后续页面请求中访问所需的值?
谢谢!
答案 0 :(得分:4)
这是ViewState
属性的用途。它可以让你在往返过程中持续存在物体。
答案 1 :(得分:2)
您可以像文本输入一样访问隐藏输入的value属性。
hiddenFieldPage.Value = "2"; // page 2!
if (hiddenFieldPage.Value == "2")
// show page 2!
您可能需要包含System.Web.UI.HtmlControls。另外,我似乎记得一个asp:hidden控件,它基本上是WebControls命名空间中隐藏输入的包装器。
答案 2 :(得分:2)
使用viewstate,是您情况的最佳选择:
// Storing a student in view state.
Student stud = new Student("John", "Doe");
ViewState["CurrentStudent"] = stud;
// Retrieve a student from view state
Student stud = (Student) ViewState["CurrentStudent"];
您需要注意的是,您的类必须可序列化才能存储在视图状态中。
答案 3 :(得分:1)
ASP.NET使用LosFormatter
class来序列化视图状态。从本质上讲,你正在做类似的事情。只需将所需数据存储在对象中,并将其序列化为隐藏表单字段。使用Request.Form["..."]
获取值并将其反序列化。
答案 4 :(得分:0)
根据我在这里阅读的一些小信息,我猜测向导控制可能适合你吗?
除此之外,你可以使用Cross Page Postback。它没有查询字符串或会话。
答案 5 :(得分:0)
如果你有
<asp:HiddenField ID="ObjectID" runat="server" />
然后
<asp:ControlParameter ControlID="ObjectID" Name="Parameter's name" PropertyName="Value" Type="Int32" />