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 %>がクライアントに送信する理由をさまよっているだけです。

--NJ

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

これは、ヘッドタグリンクではサーバーコントロールと見なされ、サーバーコントロールでは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 に答える