Редактировать метатег HTML с ASP.NET - PullRequest
2 голосов
/ 06 января 2009

Вопрос

<ч />

Я пытаюсь создать быструю и простую страницу 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 действительно выполнялся?

Решение 1

<ч /> В настоящее время я исправил свою проблему, удалив кавычки из атрибута HTML. Таким образом, метатег выглядит следующим образом:


<meta http-equiv="refresh" content=10;url=http://contact.test.net/main.aspx?<%=Request.QueryString.ToString()%> />



Хотя это решает проблему, мне было бы любопытно, если бы кто-нибудь знал о более правильном способе сделать это, где я мог бы избежать буквальных кавычек атрибута HTML.


Решение 2 (окончательное выбранное решение)

<ч /> По очень ценному совету Скотта, я решил пойти дальше и сделать это из кода. Для тех, кому интересно, как это было реализовано:


    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

Спасибо,
Chris

Ответы [ 3 ]

3 голосов
/ 07 января 2009

Может быть, этот код внутри тега head будет тем, что вам нужно:

<%= 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, если вы не отключили его функции безопасности, и вы никогда не знаете, отключит ли их кто-либо (или даже вы сами) по какой-то другой причине.

Кодовый код массаж строки запроса настоятельно рекомендуется!

1 голос
/ 07 января 2009

Вы пытались добавить весь метатег программно?
Как только вы заставите сервер работать, добавьте ваш новый тег динамически в Page_Load (), и вы сможете указать все его атрибуты.

Процесс хорошо описан здесь:
http://www.howtoadvice.com/SetMetaTags

0 голосов
/ 24 мая 2009

Удалить атрибут runat="server" из <head>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...