问题
我正在尝试构建一个快速且简单的 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(最终选择的解决方案)
根据 Scott 非常赞赏的建议,我决定继续从后面的代码中执行此操作。对于任何好奇这是如何实现的人:
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
谢谢,
克里斯
最佳答案
也许 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 的安全功能,则会抛出异常,并且您永远不知道是否有人(甚至您自己)会出于其他原因关闭这些功能。
强烈建议对查询字符串进行代码隐藏按摩!
关于c# - 使用 ASP.NET 编辑 HTML 元标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/417510/