0

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

    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 %>给客户端。

--新泽西州

4

2 回答 2

1

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

<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 会将整个属性视为字符串文字。

于 2012-07-11T05:06:52.027 回答
1

这是因为在 head 标签中 Link 被视为服务器控件,并且在服务器控件中 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";
于 2012-07-11T05:07:56.773 回答