使用<%=%>时的输出不同

时间:2012-07-11 05:01:16

标签: c# asp.net css

为了获得完全合格的应用程序路径,我编写了一个函数:

    public class Generic
    {
        public static string FullyQualifiedApplicationPath
        {
            get
            {
                //Return variable declaration
                string appPath = string.Empty;

                //Getting the current context of HTTP request
                var context = HttpContext.Current;

                //Checking the current context content
                if (context != null)
                {
                    //Formatting the fully qualified website url/name
                    appPath = string.Format("{0}://{1}{2}{3}",
                                            context.Request.Url.Scheme,
                                            context.Request.Url.Host,
                                            context.Request.Url.Port == 80
                                                ? string.Empty
                                                : ":" + context.Request.Url.Port,
                                            context.Request.ApplicationPath);
                }

                if (appPath.EndsWith("/"))
                    appPath = appPath.Substring(0, appPath.Length - 1);

                return appPath;
            }
        }

    }

当我在<head>之间的<%=%>标记中使用它时,我得到了不同的输出。

<link href="<%= Generic.FullyQualifiedApplicationPath %>/Styles/StyleSheet.css" rel="stylesheet" type="text/css" />
<script src="<%= Generic.FullyQualifiedApplicationPath %>/Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>

html输出:

<link href="&lt;%= Generic.FullyQualifiedApplicationPath %>/Styles/StyleSheet.css" rel="stylesheet" type="text/css" />
<script src="http://localhost:2093/SourceOne/Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>

只是为什么asp.net引擎将&lt;%= Generic.FullyQualifiedApplicationPath %>发送给客户端。

- NJ

2 个答案:

答案 0 :(得分:1)

ASP.NET基本上将您的内联评估视为字符串文字并将其转义。您可以尝试使用数据绑定语法&lt;%#%&gt;

<link runat="server" id="lnkStyle" href='<%# Generic.FullyQualifiedApplicationPath   + "/Styles/StyleSheet.css"%>' rel="stylesheet" type="text/css" />
<script runat="server" id="scptJQuery" src='<%# Generic.FullyQualifiedApplicationPath + "/Scripts/jquery-1.7.2.min.js"%>' type="text/javascript"></script>

然后在你的代码中,覆盖OnPreRender,并输入以下逻辑

lnkStyle.DataBind();
scptJQuery.DataBind();

重要的是绑定语法不与其他文字混合,否则ASP.NET会将整个属性视为字符串文字。

答案 1 :(得分:1)

这是因为在头标记链接中考虑作为服务器控制,在服务器控件中,hreaf会自动解码。

您可以在a代码

上查看添加runat属性
<a runat="server" href='<%= Generic.FullyQualifiedApplicationPath %>/Styles/StyleSheet.css'></a>

输出

<a href="&lt;%= Generic.FullyQualifiedApplicationPath %>/Styles/StyleSheet.css" ></a>

我认为解决方案是从代码中传递href

<link rel="stylesheet" type="text/css" runat="server" id="mystyle" />

中的代码

mystyle.Href= Generic.FullyQualifiedApplicationPath + "/Styles/StyleSheet.css";