2009-12-15 34 views
23

Có cách nào để tôi có thể đọc các giá trị cấu hình trong web.config bằng javascript không? Tại sao tôi muốn làm điều đó?Đọc web.config từ JavaScript

Tôi có bộ hẹn giờ trong trang web sẽ bật lên một hộp thoại theo kiểu với bộ hẹn giờ đếm ngược (đếm ngược trong 2 phút) nếu người dùng không hoạt động trong 20 phút. Nếu người dùng không phản hồi, nó sẽ ghi lại. Nếu anh ấy thực hiện, nó ping tới máy chủ (để duy trì phiên) và giữ phiên còn sống

15 phút này được mã hóa cứng trong tệp js. Tôi thà muốn nhặt nó lên từ một tập tin cấu hình/một số tập tin khác hơn so với việc nó cứng mã hóa vào JS

đây là đoạn mã

$.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' 
     } 

Bất kỳ lời đề nghị?

Chỉnh sửa: Đây là tệp js riêng biệt. Làm <% =%> sẽ đưa ra lỗi "ký tự XML bất hợp pháp [Lỗi trên lỗi này] không hoạt động: <% = ConfigurationManager.AppSettings [" Không hoạt động "]%>;"

Trả lời

44

Bạn có thể tạo JavaScript của mình từ ASP.NET.

Sau đó chỉ cần viết các thiết lập ở phía máy chủ để var defaults của bạn như thế này:

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

EDIT:

Nếu bạn muốn giữ JavaScript trong file js tĩnh, bạn có thể vẫn khởi tạo var defaults từ một <script> nhỏ được ứng dụng ASP.NET của bạn hiển thị. Cài đặt của bạn sẽ là toàn cầu, giống như số AppSettings trong web.config.

+1

đẹp một. cám ơn. điều này sẽ đi vào masterpage của tôi – ram

+0

tốt hơn ................... một – Lijo

+0

Tôi vẫn có thể sử dụng cùng nếu chỉ một tệp javascript của nó? – Mitz

0

Tạo file JS của bạn năng động và có nó timeout viết ra bởi một server-side script có khả năng đọc web.config của bạn

14

Vượt qua chúng trong khi biến từ xem.

<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> 

Lặp lại cho nhiều lọ như bạn có.

+1

Jarrett: điều này sẽ chia các js trên aspx và tệp js. Tôi nghĩ sẽ tốt hơn nếu chúng ta có thể duy trì nó ở một nơi – ram

4

Thông thường bạn không muốn web.config truy cập trực tiếp vào ứng dụng khách vì nó có thể chứa một số thông tin quan trọng về cấu hình của bạn (ví dụ: thông tin đăng nhập cho cơ sở dữ liệu bạn đang sử dụng).

Tốt hơn nên làm cho tệp JS của bạn động và thêm thông số thích hợp từ cấu hình của bạn. Ví dụ:

$.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' 
    } 
0

Ví dụ, bạn có một biến appSettings định nghĩa là

thêm key = "ApplicationId" value = "2"

từ từ một tập tin javascript bạn không thể đọc (vì điều này nằm trong máy chủ), những gì bạn có thể làm là xác định biến trong tệp chính. do đó, tệp chính của bạn sẽ chứa biến tập lệnh java.

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

Bây giờ từ tập tin script java bạn có thể truy cập vào biến này kể từ biến siteHost này có một phạm vi toàn cầu trong kịch bản java.

Vì vậy, bạn có thể truy cập biến này trong tệp .js của mình dưới dạng,

cảnh báo (appId);

6

Không thể truy cập trực tiếp vào tệp cấu hình từ tệp JS tĩnh riêng biệt. Một cách để làm điều này là thêm tập lệnh java vào trang .aspx.

My Web Config

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

trang aspx của tôi enter image description here

Chúng tôi đang thiết lập trên toàn cầu biến này vì vậy chúng tôi có thể truy cập vào biến này bên trong js tĩnh của chúng tôi nộp js tôi nộp home.js

function ReadConfigSettings() 
{ 
    alert(test); 
} 

để chúng tôi có thể đọc các giá trị cấu hình web từ javascript bởi wa này y

4

Sau khi đặt giá trị trên tệp cấu hình, trên trang bạn sẽ sử dụng giá trị đặt tập lệnh java theo cách này dưới đây: Bạn sẽ truy cập vào giá trị trong tập lệnh java dưới dạng toàn cục, không cần thiết tuyên bố nó.

trên cấu hình web:

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

trên trang html:

<script> 
    var varName= '@System.Configuration.ConfigurationManager.AppSettings["varName"]'; 
</script> 
Các vấn đề liên quan