重定向后,旧页面的元刷新仍然执行

时间:2014-10-15 09:12:31

标签: c# asp.net redirect meta-tags

我有一个我目前无法处理的奇怪问题。我尝试了很多东西而没有任何帮助。

我有一个简单的页面,其中包含4个隐藏输入的表单。这些输入用jQuery填充。完成后,我使用jQuery提交表单。

对于用户没有Javascript的可能性,我在第一次请求时在我的页面加载事件中包含了metaRefresh标记。

当用户没有JavaScript时,它按预期工作。但是当它被激活时,即使执行了重定向,在这些定义的10秒之后,即使我到达下一页,元标记也会执行。

我对这一刻感到非常沮丧,这对我来说完全是胡说八道,我不明白这是怎么回事。是否存在导致这种特殊行为的特殊情况?

也许还有一个备用选项可以在停用JS时强制进行页面更改。

增加:

添加Refresh-Tag的代码:

var refreshTag = new HtmlGenericControl("meta");
refreshTag.Attributes.Add("http-equiv", "refresh");
refreshTag.Attributes.Add("content", "10; URL=" + Request.RawUrl + "&rp=3");
head.Controls.Add(refreshTag); 

刷新代码:

在所有情况下,刷新标签都将被删除。

Response.Redirect(link, false);
Context.ApplicationInstance.CompleteRequest();
return;

OR

Response Redirect(link,true);

OR

Response.Status = "301 Moved Permanently";                
Response.AddHeader("Location", link);          

1 个答案:

答案 0 :(得分:0)

为了防止重定向行为,您应该避免将元标记包含在母版页中,因为即使重定向后它也会在每个页面上呈现。

另一种选择可能是将元标记包装在noscript元素中,只有在Javascript被停用时才会执行元刷新:

 var noscriptTag = new HtmlGenericControl("noscript");

 var refreshTag = new HtmlGenericControl("meta");
 refreshTag.Attributes.Add("http-equiv", "refresh");
 refreshTag.Attributes.Add("content", "10; URL=" + Request.RawUrl + "?rp=3");

 noscriptTag.Controls.Add(refreshTag);

 this.Header.Controls.Add(noscriptTag); 

Head元素中的渲染输出如下所示:

<noscript>
    <meta http-equiv="refresh" content="10; URL=/?rp=3"></meta>
</noscript>

有关noscript标记的更多信息,请查看:

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript

这将阻止激活JS时的元标记行为。