Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在导航离开一个页面时清除会话_C#_Javascript_Asp.net_Ajax_Page Lifecycle - Fatal编程技术网

C# 如何在导航离开一个页面时清除会话

C# 如何在导航离开一个页面时清除会话,c#,javascript,asp.net,ajax,page-lifecycle,C#,Javascript,Asp.net,Ajax,Page Lifecycle,我用谷歌搜索了一下,大概一个半小时没找到。场景是,动态脚本保存在字符串生成器中,其“string”表示存储在会话中。恰好,当用户从一个页面导航到另一个页面时,[来自会话]的脚本使用“RegisterStartupScript”注册。脚本已在页面的PreRender事件中注册。因此,我想在会话中清除此脚本,同时页面导航到别处,顺便说一句,排除创建另一个会话变量的选项并清除前一个。这是一个开销:(为什么要在会话中存储此脚本,是否需要在GET请求之间维护此脚本 如果只有回发相关,则可以将其存储在vie

我用谷歌搜索了一下,大概一个半小时没找到。场景是,动态脚本保存在字符串生成器中,其
“string”
表示存储在会话中。恰好,当用户从一个页面导航到另一个页面时,[来自会话]的脚本使用
“RegisterStartupScript”
注册。脚本已在页面的PreRender事件中注册。因此,我想在会话中清除此脚本,同时页面导航到别处,顺便说一句,排除创建另一个会话变量的选项并清除前一个。这是一个开销:(

为什么要在会话中存储此脚本,是否需要在GET请求之间维护此脚本

如果只有回发相关,则可以将其存储在viewstate中,因为只有在回发时才会维护该状态


如果希望此字符串在GET请求中也可用,则可能需要引入另一个变量,该变量具有标识生成脚本的页面的标识符。如果请求的页面与控制变量不匹配,则必须生成一个新脚本。

为什么要将此存储在会话中,是否需要是否在GET请求之间插入此脚本

如果只有回发相关,则可以将其存储在viewstate中,因为只有在回发时才会维护该状态


如果希望此字符串在GET请求中也可用,则可能需要引入另一个变量,该变量具有标识生成脚本的页面的标识符。如果请求的页面与控制变量不匹配,则必须生成新脚本。

您可以使用JavaScript
onUnload()
并调用AJAX服务,该服务将清除服务器端会话。

您可以使用JavaScript
onUnload()
并调用AJAX服务,这将清除服务器端会话。

用户如何离开页面?您不能使用ASP.NET按钮代替超链接,然后在清除会话变量后在代码中执行重定向吗

protected void btnDoSomething_Click(object sender, EventArgs e)
{
    Session["Value"] = String.Empty;
    Response.Redirect(strURL, false);
}
或者,您可以在查询字符串中添加一个变量,并在目标页面的页面加载事件中检查该变量:

Webform1.aspx?reset=true

用户如何离开页面?您不能使用ASP.NET按钮而不是超链接,然后在清除会话变量后在代码中执行重定向吗

protected void btnDoSomething_Click(object sender, EventArgs e)
{
    Session["Value"] = String.Empty;
    Response.Redirect(strURL, false);
}
或者,您可以在查询字符串中添加一个变量,并在目标页面的页面加载事件中检查该变量:

Webform1.aspx?reset=true

因为我还不能评论,请使用onUnload()

它也会在完整的回发上启动。Ajax回发不会启动


您需要做的是,在onUload函数中保证您只在需要时清除会话。就像在回发之前将变量isPostBack设置为true,以便onUnload看到该变量,并且不发送清除会话的请求一样。

因为我还不能注释,请使用onUnload()

它也会在完整的回发上启动。Ajax回发不会启动



您需要做的是,在onUload函数中保证您只在需要时清除会话。就像在回发之前将变量isPostBack设置为true,以便onUload看到该变量并不发送清除会话的请求一样。

为什么要将其存储在会话中?
这些脚本是动态生成的d基于数据库数据。该脚本附加到gridview行以进行Ajax编辑,使用webservice进行更新。我不可能将其放在ViewState中。第三个选项位于生成新密钥的大NOI下,我不是说您应该生成一个新密钥,您可以将所有脚本存储在同一个会话变量中,但只需添加一个简单的控件va包含页面标识符的变量。这就是我现在想到的,你还有其他想法吗?我认为你没有更多的选项:)我没有其他答案,因此不得不接受更接近答案的答案作为“答案”
为什么要将此存储在会话中?
这些脚本是基于数据库数据动态生成的。该脚本附加到gridview行以进行Ajax编辑,并使用webservice进行更新。我不可能把它放在ViewState中。第三个选项在生成新密钥下太大了我不是说你应该生成一个新密钥,你可以将所有脚本存储在同一个会话变量中,但只需添加一个包含页面标识符的简单控制变量。这就是我现在想到的,你还有其他想法吗?我认为你没有更多的选择:)我没有其他答案,因此不得不接受更接近答案的答案,因为“答案”所以
onUnLoad
只在导航离开时执行,或者也是回发??所以
onUnLoad
只在导航离开时执行,或者也是回发时执行??重定向是通过菜单。menuitem不执行回发操作,即使它执行回发操作,我也不想为导航而回发如何向菜单项添加选项,使其显示在查询字符串中,并在目标页面的Page_Load事件中重置会话变量?你知道怎么做吗?当你只有一堆页面,SEO很重要的时候,这不是最好的主意。似乎除了使用viewstate之外没有其他出路,viewstate是状态持有者的另一个变量[保持脚本状态]。感谢Winston的回答。重定向是通过菜单完成的。menuitem不执行回发操作,即使它执行回发操作,我也不想为导航而回发如何向菜单项添加选项,使其显示在查询字符串中,并在目标页面的Page_Load事件中重置会话变量?你知道怎么做吗?当你只有一堆页面,SEO很重要的时候,这不是最好的主意。似乎除了使用viewstate之外没有其他出路,viewstate是另一个变量,作为状态持有者[保持脚本状态]。感谢您的回答,Winston感谢您找到解决方案了吗。我有一个类似的问题你找到解决办法了吗