我正在尝试构建一个快速简便的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代码实际执行?
<小时/> 目前,我已通过从HTML属性中删除引号来解决我的问题。从而使元标记如下:
<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
谢谢,
克里斯
答案 0 :(得分:3)
也许head标签中的代码就是您所需要的:
<%= string.Format("<meta http-equiv='refresh' content='10;url=http://contact.test.net/main.aspx?{0}' />", Request.QueryString.ToString()) %>
然而,我不建议你这样做。例如,此网址:
http:/mysite.with.metaredirect?<script>alert('hello!!!')</script>
如果您没有禁用其安全功能,将在asp.net中抛出异常,并且您永远不会知道某人(甚至您自己)是否会因其他原因将其关闭。
建议使用强烈的查询字符串代码隐藏按钮!
答案 1 :(得分:1)
您是否尝试过以编程方式添加整个元标记? 在运行服务器端之后,在Page_Load()上动态添加新标记,并指定其所有属性。
这个过程在这里有详细描述:
http://www.howtoadvice.com/SetMetaTags
答案 2 :(得分:0)
从runat="server"
<head>
属性