从JavaScript读取web.config

时间:2009-12-15 20:16:56

标签: asp.net javascript web-config

有什么办法可以用javascript在web.config中读取配置值吗? 我为什么要这样做?

我的网站上有一个计时器,如果用户处于非活动状态20分钟,它会弹出一个带倒计时器的模态对话框(倒计时2分钟)。如果用户没有回应,则会将其记录下来。如果他这样做,它会ping到服务器(以维持会话)并使会话保持活动

这15分钟是在js文件中硬编码的。我宁愿从配置文件/其他文件中获取它,而不是将其硬编码到JS中

这是代码段

$.fn.idleTimeout = function(options) {
        var defaults = {
                    //I would like to pick these values from some config file
            inactivity: 900000, //15 minutes 
            noconfirm: 120000, //2 minutes
            sessionAlive: 900000, //15 minutes
            click_reset: true,
            logout_url: '/Views/Pages/Timeout.aspx' 
        }

有什么建议吗?

编辑:这是一个单独的js文件。做<%=%>会给出错误“非法XML字符 [打破此错误]不活动:<%= ConfigurationManager.AppSettings [“Inactivity”]%>;“

8 个答案:

答案 0 :(得分:51)

您可以从ASP.NET生成JavaScript。

然后只需将服务器端的设置写入var defaults,就像这样:

var defaults = {
    inactivity: <%=ConfigurationManager.AppSettings["Inactivity"] %>
}

修改

如果您想将JavaScript保存在静态js文件中,您仍然可以从ASP.NET应用程序呈现的小var defaults初始化<script>。您的设置将是全局设置,就像AppSettings中的web.config一样。

答案 1 :(得分:15)

从视图中将它们作为变量传递。

<script type="text/javascript">
   // needs to reside in your *.aspx file.
   $(function() {
       initPage(<%= Settings.Default.Inactivity %>, <%= Settings.Default.NoConfirm %>, <%= Settings.Default.LogoutUrl %>)
    });
    // Can reside in your *.aspx or in a *.js file.
    function initPage(inactivity, noconfirm, logoutUrl) {
        $.fn.idleTimeout = function(options) {
            inactivity: inactivity,
            noconfirm: noconfirm,
            logout_url: logoutUrl
        };
    };
</script>

重复你所拥有的许多变种。

答案 2 :(得分:8)

直接从单独的静态JS文件访问配置文件是不可能的。这样做的一种方法是在.aspx页面中添加java脚本。

我的网站配置:

<appSettings>
   <add key="test" value="textBox"/>
</appSettings>

我的aspx页面  enter image description here

我们在全局设置此变量,因此我们可以在静态js文件中访问此变量my js file home.js

function ReadConfigSettings()
{
   alert( test);
}

所以我们可以通过这种方式从javascript中读取web配置值。

答案 3 :(得分:6)

将值放在配置文件之后,在你将使用该值的页面上放置java脚本这样:你将在java脚本中作为全局访问该值,没有必要声明它

在网络配置上:

 </appSettings>
    <add key="varName" value="1" />
  </appSettings>

在html页面上:

<script>
    var varName= '@System.Configuration.ConfigurationManager.AppSettings["varName"]';
</script>

答案 4 :(得分:4)

通常您不希望web.config可以直接访问客户端,因为它可能包含有关您的配置的一些重要信息(例如,您正在使用的数据库的凭据)。

最好让您的JS文件动态化并从配置中添加适当的参数。例如:

$.fn.idleTimeout = function(options) {
    var defaults = {
                //I would like to pick these values from some config file
            inactivity: <%=ConfigurationManager.AppSettings["Inactivity"].ToString() %>, 
            noconfirm: <%=ConfigurationManager.AppSettings["NoConfirm"].ToString() %>, //2 minutes
            sessionAlive: <%=ConfigurationManager.AppSettings["SessionAlive"].ToString() %>, //15 minutes
            click_reset: true,
            logout_url: '/Views/Pages/Timeout.aspx' 
    }

答案 5 :(得分:1)

我已经尝试了以下方法,并且在我正在使用的.aspx页中它对我有用,但我发现对我不起作用的是使用'[',而不是我使用了'(',对我来说。

var key = '<%=System.Configuration.ConfigurationManager.AppSettings("Environment").ToString() %>';

答案 6 :(得分:0)

使您的JS文件动态化并让服务器端脚本写出超时,该脚本可以读取您的web.config

答案 7 :(得分:0)

例如,您将appsettings变量定义为

add key="ApplicationId" value="2"

因为从javascript文件中你无法读取它(因为它驻留在服务器中),你可以做的是在主文件中定义变量。所以你的主文件将包含java脚本变量。

<% var appId= ConfigurationManager.AppSettings["ApplicationId"]; %>

现在,您可以从java脚本文件访问此变量,因为此siteHost变量在java脚本中具有全局范围。

因此,您可以在.js文件中访问此变量,

alert(appId);