有没有办法在页面加载后保存查询字符串ID?我正在寻找的原因是...我应该来回寻找页面,更重要的是如果用户尝试使用itupluate ids然后它不应该影响我的页面的结果,因为我将不会从查询字符串读取ID但是从一些保存道具或类似的东西。
举个例子:让我们说第一次加载页面......我有这个网址:
http://www.somesite.com/Shop/Product/Detail.aspx?ProductId=100
如果用户尝试修改querystirng并重新加载页面,那么page_load不应该从querystring中读取而是从保存的prop或者其他内容读取???
答案 0 :(得分:1)
在页面加载事件中,查看Page.IsPostBack属性。首次加载页面时为false。您应该验证您的参数,然后将它们保存到session或viewstate。
If Page.IsPostback = false Then
'Validate Request("ProductID") here
'Save in viewstate or session state
Else
'Retrieve ProductID from viewstate or session state
End If
如果用户更改了查询字符串,则应将其视为新页面加载。
答案 1 :(得分:0)
这不起作用,因为它违背了互联网的基本性质。 互联网是无国籍的。
每次用户更改查询字符串时,都会将其视为新的Url,存储参数将毫无用处。由于每次更改网址都是第一次点击,因此Page.IsPostback无效。
这样说,你仍然可以解决它,
使用每个网址,您都可以传递唯一标识符(例如GUID。)
只要页面点击,您就可以在会话中保存参数并使用它们,并使用Guid映射这两个请求。
但问题仍然存在,如果用户更改了Guid,那么它将被视为新请求。您可以提前一步并开始保存该GUID,以确保只处理系统生成的GUID,但总的来说它只会使您的系统变得复杂。
我的猜测是,您可能正在为您的问题寻找错误的解决方案。如果你能分享你的实际目标,那么我们可能会推荐你更有形的东西。
答案 2 :(得分:0)
您无法阻止用户编辑查询字符串值并尝试查看其他页面的内容或执行某些操作。您可以做的是您可以检查该用户是否有足够权限访问此页面的页面加载。
Ex : www.mysite.com/editproduct.aspx?productid=4
在editproduct.aspx
中,您必须检查产品4是否可以访问正在访问该页面的当前用户。(可能他应该是创建者/他应该在特定的高级用户组中等等。) 。取决于你的情况)。如果他有权访问,则向用户显示编辑表单,否则将其隐藏并显示一条消息,说明“您无权访问此资源。”
答案 3 :(得分:0)
没有办法;但是,您可以使用session来验证调用Page_load的时间。
If ( Page.isPostBack = true ) {
Session("SAVE") = false;
}
在Request.Querystring语句之前的一段时间内,验证“保存”会话状态。