我的iframe asp.net页面有问题。 浏览器网址包含我需要在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来获取我需要的值并使用更改的QueryString来激活reload()。
Page_Load再次开火,现在我已经将bool isReloaded填充为true。 条件(!isReloaded)阻止了这次javascript不会被添加到Response。 我不知道为什么,但是Page_Load再次触发,这次没有添加参数,所以它与开始时的情况相同,并且再次添加JS等。
结果是Page_load无休止地激发。 我做错了什么 ?是什么原因?
答案 0 :(得分:1)
如果您查看代码,可以使用以下代码:
js.Append("if(window.location.href.indexOf('reloaded=true') == -1) window.location.reload();");
您正在检查location.href
是否已重新加载&#39; var,但请注意,一旦更改位置就会重新加载页面,并且脚本在完成之前会一直执行,因此会导致重新加载页面而不会使用查询字符串。
删除此行,它应该可以正常工作。
另一件事,我改变你的代码一点点在页面上注册脚本而不是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);
}
}
答案 1 :(得分:0)
感谢您的帮助。 现在我有这样的感觉,没关系。
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("if(window.location.href.indexOf('reloaded=true') == -1) window.location.href = window.location.href + '?reloaded=true&contentId=' + last;");
js.Append("<" + "/script>");
我不知道编辑位置会自动执行重新加载;) 再次感谢