有什么办法可以用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”]%>;“
答案 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页面
我们在全局设置此变量,因此我们可以在静态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);