从javascript中读取AppSettings

时间:2012-10-16 02:42:38

标签: javascript asp.net c#-4.0

我正在尝试创建一个检索web.config应用设置值的函数。如果我将代码alert('<%=ConfigurationManager.AppSettings["facebookAppID"].ToString() %>')直接放在.ascx文件中,则此方法有效。但是如果我从.ascx文件中调用.js文件中的公共函数(以便具有一个共同的全局函数),它就不起作用了......即。它不会评估值,而是只返回字符串“&lt;%= System.ConfigurationManager.AppSettings [\”facebookAppID \“]。ToString();%&gt;”

为什么会这样想?

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

4 个答案:

答案 0 :(得分:1)

常见的.js文件,如果你像这个脚本一样包含它们src =“somescript.js”/ script在客户端浏览器上加载,并且永远不会在服务器上处理。

使用javascript加载文件/值的唯一方法是执行和ajax调用返回JSON或文本的aspx页面。

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

答案 1 :(得分: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>
    
  4. 这绝对不是最优雅的做法,但我认为它会帮助你实现你想要的目标。

答案 2 :(得分:1)

一种方法是使用“自定义控制”页面。在您的网站中添加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部分调用此控件

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

**确保标题标记中有runat="server"

现在,您可以致电GetappId()并在aspx页面的任意位置获取所需结果。

更新 - 另一种解决方案

另一种方法是创建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>

现在在页面的任何位置调用您的函数。

答案 3 :(得分:0)

您可以使用ClientScriptManager RegisterClientScriptBlock()RegisterStartupScript()将JavaScript注入您的标记,并将您的应用设置内联或调用方法并将设置作为参数传递。

另一种方法是渲染隐藏字段并在那里包含您的设置,然后在您的javascript代码中引用它。