ASP.NET 在重定向和回发之间传递值

标签 asp.net

首先,感谢您的阅读。

我会尽可能明确地描述我的情况。

我有一个用户可以发表评论的页面。 这是评论流程

  • A-1。单击“评论”按钮
  • A-2。使用 ajaxtoolkit 中的 ModalPopupExtender 显示带有文本框的模式弹出窗口。
  • A-3。用户在文本框中输入评论,然后单击“确定”。

但是,当用户未登录时,预期行为会发生变化。

  • B-1。单击“评论”按钮
  • B-2。显示带有 id 和 pwd 文本框的登录模式弹出窗口。
  • B-3。用户输入 ID 和密码,然后单击“确定”。
  • B-4。显示评论模式弹出窗口
  • B-5。用户输入评论并单击“确定”。

我在处理此案时遇到问题。

当 B-3 发生时,页面被回发,我登录用户,更新 session 对象,然后我 Response.Rediect() 页面自身以显示正确的登录状态(我必须..)。 重定向后,在 Page_Load() 中,我需要检查一些值以显示 Comment-Modal-Popup。 但我不知道如何..

这是我的考虑

  • View 状态
    • 我只是无法使用它,因为页面已重定向而不是回发。
  • 查询字符串
    • 我可以在重定向时在 URL 上添加“showCommentPopup=1”,但这会在 URL 中留下不需要的 QueryString。我不希望用户滥用它。
  • session
    • 我实际上使用了 Session 对象。在重定向之前,我将 Session[ "ShowCommentPopup"] 设置为 true。如果在 Page_Load() 中设置了它,我会将其删除并显示弹出窗口。

当用户在多个选项卡中打开同一页面时,像我一样使用 session 无法正常工作。

  1. 用户打开两个具有相同 URL 的选项卡(在 Firefox 中)
  2. 用户在第一个选项卡中执行从 B-1 到 B-3 的步骤。
  3. 在页面在 B-3 和 B-4 之间重定向之前,用户刷新第二个选项卡。
  4. 如果时机正确,评论弹出窗口将显示在第二个选项卡中。

我希望听到来自 stackoverflow 的深刻见解..

最佳答案

我还没有尝试过这个,但我认为如果您将 ShowCommentPopup 标志存储在 HttpContext.Items 集合中而不是 session 中,然后使用 Server. Transfer 而不是 Response.Redirect 您应该能够达到预期的结果。

HttpContext.Items 是一个字典,可用于存储其生命周期为请求生命周期的数据。这意味着来自不同选项卡或窗口的第二个请求将具有不同的 HttpContext.Items 字典。

Server.Transfer 有点像Response.Redirect,因为它允许您加载“不同”的 URL 而不是原始 URL。但是,当 Reponse.Redirect 发起新请求时,Server.Transfer 会将现有请求传输到服务器上的新页面。

关于 Response.Redirect 和 Server.Transfer 之间差异的更好解释可以在 here 中找到。 .

示例


bool showCommentPopup = false;
if (HttpContext.Current.Items["ShowCommentPopup"] != null)
{
    showCommentPopup  = (bool)HttpContext.Current.Items["ShowCommentPopup"];
}

//...

HttpContext.Current.Items["ShowCommentPopup"] = true;

关于ASP.NET 在重定向和回发之间传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1219109/

相关文章:

c# - ASP.NET 下载处理程序适用于 IE 但不适用于 Chrome

c# - 如何在 ListView 中使用模板(asp.net、c#)

javascript - 如何在 webforms 中使用 jquery 访问 .net 集合的项目

c# - 如何阻止 asp.net 在表单回发时重新附加查询字符串?

asp.net - 我想在 .NET MVC 中使用剑道网格添加全选复选框

javascript - 如何将字符串作为参数从 View 传递到 javascript 函数?

asp.net - 具有不同参数类型的 MVC3 路由

asp.net - 构建 Web 部署项目时找不到文件

javascript - 是否可以从不同页面的后台代码访问java脚本数据?

jQuery UI 对话框内容显示在页面本身中