C# 单击asp.net后退按钮即可管理表单数据(通过会话或视图状态处理除外)
我在搜索页面上有一个表单,有文本框、下拉框和复选框。选择搜索条件并单击搜索按钮后,搜索结果将显示在另一页上。我正在使用搜索结果页面上的asp按钮返回搜索页面,我希望保留表单数据(文本框、下拉列表/复选框的选择等,我之前为搜索所做的)。我已经通过Session和Viewstate实现了它,所以我想知道管理它的其他方法 非常感谢您的回复,C# 单击asp.net后退按钮即可管理表单数据(通过会话或视图状态处理除外),c#,javascript,jquery,asp.net,ajax,C#,Javascript,Jquery,Asp.net,Ajax,我在搜索页面上有一个表单,有文本框、下拉框和复选框。选择搜索条件并单击搜索按钮后,搜索结果将显示在另一页上。我正在使用搜索结果页面上的asp按钮返回搜索页面,我希望保留表单数据(文本框、下拉列表/复选框的选择等,我之前为搜索所做的)。我已经通过Session和Viewstate实现了它,所以我想知道管理它的其他方法 非常感谢您的回复, Harish Bhatt您可以使用一个查询字符串,在文本框、下拉框、复选框等中保存所选项目的ID,如下所示: Search.aspx?textId=3&d
Harish Bhatt您可以使用一个查询字符串,在文本框、下拉框、复选框等中保存所选项目的ID,如下所示:
Search.aspx?textId=3&dropdownId=7
您还需要将这些值传递到结果页面,以便在您想要返回时可以将它们传递回搜索页面
Results.aspx?textId=3&dropdownId=7
注意:随着参数数量的增加,此选项会变得很难使用,但它是
会话
缓存的可行选项。您可以使用一个查询字符串,在文本框、下拉框、复选框等中保存所选项的ID,如下所示:
Search.aspx?textId=3&dropdownId=7
您还需要将这些值传递到结果页面,以便在您想要返回时可以将它们传递回搜索页面
Results.aspx?textId=3&dropdownId=7
注意:随着参数数量的增加,这种替代方法会变得笨拙,但它是
会话
缓存的一种可行替代方法。我建议将clientstate信息存储在数据库中,这样做有时很有用!您可以定义相应的行和列来表示需要跟踪的状态信息,或者将所有状态信息放入持久化流(使用json、xml等),只要您不需要搜索或对流化值执行db操作。将其放在数据库中可以方便地迁移到web场,或添加故障转移等。clientstate数据库不必与应用程序的其余部分是同一个数据库,以获得更大的可伸缩性。如果您使用的是sessionstate,还可以配置asp.net以在数据库中保持会话状态,以完成相同的任务。就我个人而言,我将大量使用的clientstate存储在自定义表中,并使用常规的流式方法来获取较低容量的clientstate信息
诀窍是使用sessionid作为键(或sessionid+XKEY),如果需要在同一个表中存储状态信息的多个副本,则需要XKEY。e、 例如,在店面应用程序上,XKEY可能代表页面或类似页面。我还使用它来生成一个唯一的XKEY,并在uri查询参数列表中传递XKEY——您只需在一页到另一页之间持久保存XKEY,而不是一个长的参数列表。我建议将clientstate信息存储在数据库中的一个文件夹中——这样做有时会很有用!您可以定义相应的行和列来表示需要跟踪的状态信息,或者将所有状态信息放入持久化流(使用json、xml等),只要您不需要搜索或对流化值执行db操作。将其放在数据库中可以方便地迁移到web场,或添加故障转移等。clientstate数据库不必与应用程序的其余部分是同一个数据库,以获得更大的可伸缩性。如果您使用的是sessionstate,还可以配置asp.net以在数据库中保持会话状态,以完成相同的任务。就我个人而言,我将大量使用的clientstate存储在自定义表中,并使用常规的流式方法来获取较低容量的clientstate信息
诀窍是使用sessionid作为键(或sessionid+XKEY),如果需要在同一个表中存储状态信息的多个副本,则需要XKEY。e、 例如,在店面应用程序上,XKEY可能代表页面或类似页面。我还使用它来生成一个唯一的XKEY,并在uri查询参数列表中传递XKEY——您只需将XKEY从一页保存到另一页,而不必保存很长的参数列表。您可以做很多事情
1.Cross Page Scripting
我们在ASP.NET 1.x版本中面临的问题之一是无法轻松地在页面之间传输数据。由于默认情况下ASP.NET 1.x页面回发到同一页面,并且您无法向另一页面进行回发(除非删除runat=“server”和其他脏乱的内容),访问上一页中的控件变得非常困难,这与经典ASP不同,在传统ASP中,您有一个操作标记来指定新页,并且可以使用Request.Form访问上一页的值
在ASP.NET 2.0中,有一种更有效的方法可以访问上一页中的控件。它使用页面的PreviousPage属性
假设我们有一个带有文本框“Text1”和按钮“Button1”的页面Default.aspx
我们可以通过以下步骤从另一个页面访问Default.aspx中的控件:-
A.将按钮的PostBackUrl属性设置为新页面,如下所示:-
<asp:Button ID="button1" Runat=server Text="submit" PostBackUrl="~/NewPage.aspx" />
public void page_load()
{
if(!IsPostBack)
{
TextBox tb = (TextBox)PreviousPage.FindControl("Text1");
Response.Write(tb.Text);}
}
请注意,新的文本框tb是使用上一页中控件ID的上一页和FindControl声明和类型转换的。但是,要在新页面中保留回发中的值,最好将文本指定给NewPage.aspx中的文本框或标签,以便其值不会在回发中丢失。背后的原因是,一旦您在同一页中发回,上一页将变得无效
2.Sessions
您可以参考以下链接获取帮助
例子
会话[“值”]=“任何数据”;
您可以在任何页面中访问它
3.Cookies
创建Cookie对象
HttpCookie _userInfoCookies = new HttpCookie("UserInfo");
在其中设置值
_userInfoCookies["UserName"] = "Abhijit";
_userInfoCookies["UserColor"] = "Red";
_userInfoCookies["Expire"] = "5 Days";
//将Cookie添加到当前web响应
Response.Cookies.Add(_userInfoCookies);
你可以做很多事情
1.Cross Page Scripting
我们在ASP.NET 1.x版本中面临的问题之一是无法轻松地在页面之间传输数据。由于ASP.NET 1.x页面在默认情况下回发到同一页面,并且您无法向另一页面进行回发(除非删除runat=“server”和其他脏乱的内容),因此访问上一页面中的控件变得非常困难
if (Request.QueryString["PostBack"] != null)
{
SearchCriteria objSearch = new SearchCriteria();
if (Session["SearchCriteria"] != null)
{
objSearch = (SearchCriteria)Session["SearchCriteria"];
txtFirstName.Text = objSearch.strName;
txtCode.Text = objSearch.strCode;
}
}