След пренасочване мета-опресняването от стара страница все още се изпълнява

Имам странен проблем, с който не мога да се справя в момента. Пробвах много неща и нищо не помага.

Имам проста страница с формуляр, съдържащ 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);          

person Daniel    schedule 15.10.2014    source източник
comment
Можете ли да споделите действителния код, където включвате маркера metaRefresh, както и кода за пренасочване.   -  person Faris Zacina    schedule 15.10.2014
comment
Опитвате ли се да откриете възможности на браузъра?   -  person Fabio    schedule 15.10.2014
comment
Не, не го направих, защото смятах, че това помага да не реша проблема си   -  person Daniel    schedule 15.10.2014


Отговори (1)


За да предотвратите поведението на пренасочване, трябва да избягвате включването на мета-тага във вашата основна страница, тъй като той ще бъде изобразен на всяка страница дори след пренасочвания.

Алтернативна опция може да бъде да обвиете мета-тага си в елемент 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 е активиран.

person Faris Zacina    schedule 15.10.2014
comment
Толкова просто и ефективно. Благодаря ти много. Това беше наистина страхотно решение и работи като чар. - person Daniel; 15.10.2014
comment
Благодаря! Радвам се, че мога да помогна ;) - person Faris Zacina; 15.10.2014