2

web.config アプリの設定値を取得する関数を作成しようとしています。これは、コードalert('<%=ConfigurationManager.AppSettings["facebookAppID"].ToString() %>')を .ascx ファイルに直接配置すると機能します。しかし、その .ascx ファイルから .js ファイルの共通関数を呼び出すと (共通のグローバル関数を持つように)、機能しません...つまり、値を評価せず、代わりに文字列を返すだけです"<%=System.ConfigurationManager.AppSettings[\"facebookAppID\"].ToString(); %>"

これがなぜなのかについて何か考えはありますか?

function GetappId() {
    var k = "<%=System.ConfigurationManager.AppSettings["facebookAppID"].ToString(); %>"
    alert(k);
return k
}
4

4 に答える 4

1

これは、web.config の appSettings セクションにのみ対応することに注意してください。

  1. 以下のようにDynamicJs.aspx.aspxというファイルを作成しました。appSettings からキーと値のペアを取得し、JSON 文字列を作成します。

    コードビハインド

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Configuration;
    using System.Web.Script.Serialization;
    using System.Collections.Specialized;
    
    public partial class DynamicJs : System.Web.UI.Page
    {
        private string settingsJson = string.Empty;
    
        protected void Page_Load(object sender, EventArgs e)
        {
            NameValueCollection nvc = ConfigurationManager.AppSettings;
            var dict = new Dictionary<string, string>();
            foreach (string key in nvc.Keys)
            {
                dict.Add(key, nvc[key]);
            }
            settingsJson = new JavaScriptSerializer().Serialize(dict);
        }
    
        public string GetSettingsJson() {
            return settingsJson;
        }
    }
    

    HTML (JavaScript を発行するため、コンテンツ タイプに注意してください)

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="DynamicJs.aspx.cs" Inherits="DynamicJs" ContentType="text/javascript" %>
    
    function GetValue(key){
        var data= <%=GetSettingsJson() %>;
        return data[key];
    }
    
  2. 以下のように、使用ページに DynamicJs.aspx を含めます。

    <script src="DynamicJs.aspx" type="text/javascript"></script>
    
  3. 以下を使用して、構成から値を取得します

    <script>
        alert(GetValue("key2"));
    </script>
    

これは間違いなく最もエレガントな方法ではありませんが、目的を達成するのに役立つと思います。

于 2012-10-16T06:53:04.800 に答える
1

このスクリプト src="somescript.js" /script のように含める場合、一般的な .js ファイルはクライアントのブラウザーに読み込まれ、サーバーで処理されることはありません。

JavaScript を使用してファイル/値をロードする唯一の方法は、JSON またはテキストのいずれかを返す aspx ページへの ajax 呼び出しを実行することです。

http://api.jquery.com/jQuery.ajax/

于 2012-10-16T02:49:51.030 に答える
1

これを行う 1 つの方法は、カスタム コントロール ページを使用することです。Web サイトにページを追加し、Web User Control (.ascx)スクリプト コードを挿入します。

<script type="text/javascript">
    function GetappId() {
        var k = "<%=System.ConfigurationManager.AppSettings["facebookAppID"].ToString(); %>"
        alert(k);
        return k
    }
</script>

GetappIdこのような機能が必要なページにコントロールを登録します

<%@ Register TagPrefix="Scrpt" TagName="GlobalScrpt" Src="~/WebUserControl.ascx" %>

** このタグはページ内の<%@ Page %>タグの後に続きますaspx

次に、ページのヘッドセクションで、次のaspxようにコントロールを呼び出します

<head runat="server">
    <title></title>
    <Scrpt:GlobalScrpt ID="Scrpt1" runat="server" />
</head>

**runat="server"ヘッダータグがあることを確認してください

GetappId()これで、ページのどこからでも呼び出して目的の結果を得ることができaspxます。

更新 - 別の解決策

もう1つの方法は、別のコードビハインドページなしaspxで(ページが であるとしましょう)ページを作成し、そこにコードを配置することですDefault1.aspx

<%@ Page Language="C#" %>

function GetappId()
{
    var k = "<%=System.ConfigurationManager.AppSettings["facebookAppID"].ToString(); %>";
    alert(k);
}

次に、GetappId を呼び出したいページで、最初のaspxページを JavaScript ページとして追加します。

<head runat="server">
    <title></title>
    <script type="text/javascript" src="Default1.aspx"></script>
</head>

ページ内の任意の場所で関数を呼び出します。

于 2012-10-16T08:03:42.887 に答える
0

ClientScriptManager RegisterClientScriptBlock()またはを使用して JavaScript をマークアップに挿入しRegisterStartupScript()、アプリの設定をインラインで含めるか、メソッドを呼び出して設定をパラメーターとして渡すことができます。

別のアプローチは、隠しフィールドをレンダリングし、そこに設定を含めてから、JavaScript コードで参照することです。

于 2012-10-16T04:48:50.447 に答える