gpt4 book ai didi

c# - Page_Load 无限次触发

转载 作者:行者123 更新时间:2023-12-03 12:18:32 24 4
gpt4 key购买 nike

我的 iframe asp.net 页面有问题。浏览器 url 包含我需要在 iframe 页面中使用的参数。显然我无法通过 .NET 进行访问,所以我想到了在 Page_Load 方法末尾添加这样的内容:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bool isReloaded = Request.QueryString.GetValue<bool>("reloaded");
ContentId = Request.QueryString.GetValue<int>("contentId"); //I need this value
if (!isReloaded)
{
StringBuilder js = new StringBuilder("<script language='javascript'>");
js.Append("var last = window.top.location.href.substring(window.top.location.href.lastIndexOf('/') + 1, window.top.location.href.length); ");
js.Append("window.location.href = window.location.href + '?reloaded=true&contentId=' + last;");
js.Append("if(window.location.href.indexOf('reloaded=true') == -1) window.location.reload();");
js.Append("<" + "/script>");
Response.Write(js.ToString());
}
}
}

在快捷方式中,我使用 Javascript 来获取我需要的值并触发 reload() 但更改了 QueryString。

Page_Load 再次触发,现在 bool isReloaded 填充为 true。条件 (!isReloaded) 阻止这次 javascript 将不会添加到响应中。我不知道为什么,但是 Page_Load 再次触发,这次没有添加参数,所以情况与开始时相同,并且再次添加 JS 等。

结果是 Page_load 无休止地触发。我做错了什么 ?原因是什么?

最佳答案

如果你看一下你的代码,你会看到这一行:

js.Append("if(window.location.href.indexOf('reloaded=true') == -1) window.location.reload();");

您正在检查 location.href 中的“重新加载”变量,但请注意,一旦您更改位置,您的页面就会重新加载,并且您的脚本在完成之前会继续执行,因此它会导致在没有查询字符串的情况下一遍又一遍地重新加载页面。

删除这一行,它应该可以正常工作。

另一件事是,我稍微更改了您的代码以在页面上注册脚本而不是response.write它,

应该没有什么区别,但如果您的代码仍然无法工作,请尝试我的版本:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bool isReloaded;
int ContentId;
bool.TryParse(Request.QueryString["reloaded"],out isReloaded);
int.TryParse(Request.QueryString["contentId"],out ContentId); //I need this value
if (!isReloaded)
{
StringBuilder js = new StringBuilder();
js.Append("var last = window.top.location.href.substring(window.top.location.href.lastIndexOf('/') + 1, window.top.location.href.length); ");
js.Append("window.location.href = window.location.href + '?reloaded=true&contentId=' + last;");
ExecScript(js.ToString());
}
}
}
void ExecScript(string script)
{
Page page = HttpContext.Current.CurrentHandler as Page;
if (page != null && !page.ClientScript.IsClientScriptBlockRegistered("AttachedScript"))
{
page.ClientScript.RegisterClientScriptBlock(page.GetType(), "AttachedScript", script, true);
}
}

关于c# - Page_Load 无限次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24554275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com