使用ASP.NET编辑HTML元标记

时间:2009-01-06 17:49:31

标签: c# asp.net html

问题


我正在尝试构建一个快速简便的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

谢谢,
克里斯

3 个答案:

答案 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>属性