我正在尝试创建一个检索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
}
答案 0 :(得分:1)
常见的.js文件,如果你像这个脚本一样包含它们src =“somescript.js”/ script在客户端浏览器上加载,并且永远不会在服务器上处理。
使用javascript加载文件/值的唯一方法是执行和ajax调用返回JSON或文本的aspx页面。
答案 1 :(得分:1)
请注意,这只会满足web.config
中的appSettings部分我创建了一个名为 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];
}
在消费页面中包含DynamicJs.aspx,如下所示:
<script src="DynamicJs.aspx" type="text/javascript"></script>
使用以下命令从配置中获取值
<script>
alert(GetValue("key2"));
</script>
这绝对不是最优雅的做法,但我认为它会帮助你实现你想要的目标。
答案 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代码中引用它。