ako*_*alz 4 .net c# asp.net session query-string
我正在制作一个简单的asp.net应用程序,它显示可以根据几个不同的参数进行过滤的数据.因此,当前选择的不同过滤器需要保存在某处.我是.NET的新手,我想知道保存这些信息的最佳方法.我注意到一位同事将Request.QueryString与Sessions字典结合使用.页面加载时这样的东西:
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["Category"] != null &&
Request.QueryString["Value"] != null)
{
string Category = Request.QueryString["Category"];
string CategoryValue = Request.QueryString["Value"];
// selectedFacets is the server side dictionary
selectedFacets.Add(Category, CategoryValue);
}
}
Run Code Online (Sandbox Code Playgroud)
当用户按下网页上的按钮更新URL时,会更改此处的QueryString.
我的问题是,为什么在我们使用它时,甚至根本不需要使用QueryString来保存值服务器端呢?不仅仅是让按钮成为asp控制器更容易,例如:
protected void exampleCatexampleVal_Button_onClick(object sender, EventArgs e)
{
selectedFacets.Add(exampleCat, exampleVal);
}
Run Code Online (Sandbox Code Playgroud)
类似的业务继续使用Sessions字典:它只是用于将一堆值保存到服务器上的变量,那么为什么要首先使用它呢?我确信这是有充分理由的,但是现在他们看起来似乎过于复杂.谢谢!
And*_*lil 10
根据您的代码示例,我了解您正在谈论ASP.NET WebForms.您的用例不完整,但我会在这里展示一些替代方案来实现您的目标.如果您提供进一步的信息,我很乐意更新我的答案.
在我们开始之前,让我说清楚:HTTP是无状态的.理解这个基本规则非常重要.这意味着您的服务器将收到请求,将其发送到您的应用程序(和.NET进程),获取生成的页面(和资产)并将其发送回客户端(主要是浏览器).故事结局.(几乎)您为响应请求而创建的所有内容都将丢失.这就是为什么我们可以选择在请求中存储对象/值的位置.
这是最简单的选择之一.你只需打电话this.Session.Add("key", object)就可以了.让我们深入研究一下:
这是另一种选择,你已经知道了.您可以使用querystring(?that=stuff&on=the&URL=youKnow)来回发送数据.
您可能听说过它,它是使WebForms如此可爱(以及如此可恶)的引擎.默认情况下,页面上的每个控制器都会将其状态序列化为viewstate,这是一个巨大的隐藏字段,其中包含页面上的加密数据.继续,单击"查看源"并查找它.请不要尖叫.您可以像Session一样将任意数据添加到ViewState.
所以,到现在为止,我希望你有足够的信息来做出自己的决定.如果我遗漏了什么,请告诉我.