Я пытаюсь создать быструю и простую страницу ASP.NET, которая перенаправляет пользователя на новый URL-адрес с помощью мета-перенаправления. Единственная проблема в том, что мне также нужно передать значения GET текущего запроса. Я нашел способ сделать это программно в исходном коде с помощью объекта HtmlMeta. Однако я бы хотел избежать использования кода позади и просто поместить этот код прямо на страницу ASPX.
Вот что у меня есть на данный момент:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml" >
<head runat = "server">
<title>Untitled Page</title>
<meta http-equiv = "refresh" content='10;url=http://contact.test.net/main.aspx?<%=Request.QueryString.ToString()%>' />
</head>
</html>
Однако при этом появляется следующий метатег:
<meta http-equiv = "refresh" content = "10;url=http://contact.test.net/main.aspx?<%=Request.QueryString.ToString()%>" />
Итак, есть ли способ избежать атрибута, чтобы код ASP.NET действительно выполнялся?
<meta http-equiv = "refresh" content=10;url=http://contact.test.net/main.aspx?<%=Request.QueryString.ToString()%> />
Хотя это решает проблему, мне было бы любопытно, знает ли кто-нибудь более правильный способ сделать это, где я мог бы избежать буквальных кавычек атрибута HTML.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim nRef As String = Request.QueryString("n")
Dim sRef As String = Request.QueryString("s")
Dim contentAttrBuilder As New StringBuilder("0;http://contact.cableone.net/main.aspx")
contentAttrBuilder.Append("?n = ")
contentAttrBuilder.Append(nRef)
contentAttrBuilder.Append("&s = ")
contentAttrBuilder.Append(sRef)
Dim metaRedirect As New HtmlMeta()
metaRedirect.HttpEquiv = "refresh"
metaRedirect.Content = contentAttrBuilder.ToString()
Me.Header.Controls.Add(metaRedirect)
End Sub
Спасибо,
Крис





Вы пробовали программно добавить весь метатег?
Как только вы получите запуск на стороне сервера, добавьте свой новый тег динамически в Page_Load (), и вы можете указать все его атрибуты.
Процесс хорошо описан здесь:
http://www.howtoadvice.com/SetMetaTags
Возможно, этот код внутри тега заголовка будет тем, что вам нужно:
<%= string.Format("<meta http-equiv='refresh' content='10;url=http://contact.test.net/main.aspx?{0}' />", Request.QueryString.ToString()) %>
тем не мение, я бы так не советовал. Например, этот URL:
http:/mysite.with.metaredirect?<script>alert('hello!!!')</script>
вызовет исключение в asp.net, если вы не отключили его функции безопасности, и вы никогда не знаете, отключит ли кто-то (или даже вы сами) их по какой-либо другой причине.
Рекомендуется использовать код программной части массаж строки запроса сильно!
Удалите атрибут runat = "server" из <head>