0

有没有办法在页面加载后保存查询字符串 ID?我正在寻找的原因是......我应该在页面上来回走动,更重要的是,如果用户尝试修改 id,那么它不应该影响我的页面结果,因为我将不是从查询字符串中读取 Id但从一些保存道具或类似的东西。

举个例子:假设页面第一次加载......我有这个网址:

http://www.somesite.com/Shop/Product/Detail.aspx?ProductId=100 

如果用户尝试修改 querystirng 并重新加载页面,那么 page_load 不应该从查询字符串中读取,而是从保存的道具或其他东西中读取???

4

4 回答 4

1

在您的页面加载事件中查看 Page.IsPostBack 属性。首次加载页面时为假。然后您应该验证您的参数,并可能将它们保存到会话或视图状态。

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

如果用户更改了查询字符串,您应该将其视为新页面加载。

于 2012-04-17T02:38:07.457 回答
0

这是行不通的,因为它违背了互联网的基本性质。互联网是无国籍的。

每次用户更改查询字符串时,都会将其视为新的 Url,存储参数将毫无用处。Page.IsPostback 也不起作用,因为每次 Url 更改都将是第一次点击。

话虽如此,您仍然可以解决它,

  1. 对于每个 Url,您都可以传递一个唯一标识符(如 GUID。)

  2. 一旦页面点击,您可以在会话中保存参数并使用它们并使用 Guid 映射两个请求。

但是问题仍然存在,如果用户再次更改该 Guid,它将被视为新请求。您可以提前一步开始​​保存该 GUID,以确保仅处理系统生成的 GUID,但总体而言,它只会使您的系统变得复杂。

我的猜测是,您可能正在为您的问题寻找错误的解决方案。如果您可以分享您的实际目标,那么我们也许可以向您推荐一些更具体的东西。

于 2012-04-17T02:47:24.080 回答
0

您不能阻止用户编辑查询字符串值并尝试查看另一个页面的内容或执行某些操作。你可以做的是你可以在页面加载中检查这个用户有足够的权限访问这个页面。

Ex : www.mysite.com/editproduct.aspx?productid=4

editproduct.aspx中,您必须检查产品 4 是否可以由正在访问页面的当前用户访问。(可能他应该是创建者/他应该在特定的高级用户组中等等......取决于您的情况)。如果他有权访问,则向用户显示编辑表单,否则将其隐藏并显示消息“您无权访问此资源”。

于 2012-04-17T02:47:32.333 回答
0

没有办法; 但是,您可以使用 session 来验证何时调用 Page_load。

If ( Page.isPostBack = true ) {
    Session("SAVE") = false;
}

在 Request.Querystring 语句之前的一段时间内,您验证了“保存”会话状态。

于 2012-08-13T22:02:59.203 回答