1

我需要使用 ASP Web 窗体实现单页应用程序。我遇到了导航问题。我需要使用这样的导航模式:

http:// 网站网址/.../page.aspx? {查询字符串} # {ListId} / {ItemId}

当用户向服务器请求数据时,服务器上的请求不包含哈希 #(因为这是客户端功能)。它看起来像这样:

http:// 网站网址/.../page.aspx? {请求参数}

所以,实际上我需要两个请求:

  1. 获取没有哈希的页面并加载 javascript;
  2. 使用 javascript 处理哈希数据并从服务器异步调用所需数据。

是否可以仅通过一个请求来实现此逻辑?

有没有最佳实践?

4

1 回答 1

1

您可以在发送请求之前将 ListId/ItemId 附加到查询字符串并在服务器上定期读取它。

var url = 'http://example.com?param1=10&param2=20#1000';
var beforeHash = url.split('#')[0];
var itemId= url.split('#')[1];

var processedUrl =  beforeHash + '&itemId=' + itemId;    

如果您的请求尚未从 JavaScript 触发,您将不​​得不挂钩链接的点击事件...

或者,也许您可​​以完全摆脱#并通过 JavaScript 滚动内容(我的猜测是您使用#本地锚点来跳转到文档中的不同位置)?

顺便说一句,window.location.hash有财产。

更新:根据您的评论,流程如下:

  1. 用户使用 #ItemId 键入 URL
  2. 服务器返回页面
  3. JavaScript 从 window.location 读取 #ItemId,将其放入 QueryString 并发出请求
  4. 服务器根据修改后的 QueryString 返回页面

在这种情况下,两个请求模式似乎是唯一可行的选择。按照设计,服务器不会获得 #Item 部分(称为片段)。因此,在初始请求时无法猜测 ItemId。如果在第二次(ajax)请求之后,您通过JavaScirpt刷新页面的#ItemId依赖部分,用户体验不会受到太大影响。

于 2013-06-06T06:08:09.467 回答