2009-05-13 29 views
11

Tôi muốn truy cập giá trị Session trong phương thức jquery trong trang xem MVC ASP.NET. Xem mã bên dưới,Làm thế nào để có được giá trị phiên asp.net trong phương pháp jquery?

$('input[type=text],select,input[type=checkbox],input[type=radio]').attr('disabled', '<%= Session["CoBrowse"].ToString() %>'); 

Làm cách nào để có được giá trị Phiên trong jquery.

+0

Đó có vẻ như nó nên làm việc gì xảy ra khi bạn sử dụng đoạn mã trên – ichiban

Trả lời

17
$('input,select').attr('disabled','<%=Session["CoBrowse"].ToString() %>'); 
8

Không chắc chắn đây có phải là tuyến đường tốt nhất nhưng trong trang aspx của bạn, bạn có thể tạo phương thức trả về giá trị của biến phiên, ví dụ:

Server side:

using System.Web.Services; 
[WebMethod(EnableSession = true)] 
public static string GetSession() 
{ 
    return Session["CoBrowse"].ToString(); 
} 

sau đó gọi đây là phương pháp phía khách hàng sử dụng jQuery:

$.ajax({ 
    type: "POST", 
    url: "./Default.aspx/GetSession", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(result){ 
     ('input[type=text],select,input[type=checkbox],input[type=radio]').attr('disabled', result.d); 
    } 
}); 
+3

Can.? bạn truy cập Session từ bên trong một phương thức tĩnh Tôi không nghĩ rằng bạn có thể – rball

+0

Đây là con đường tôi đã đi xuống là tốt.Tôi có một dịch vụ web mà trả về cho tôi id phiên như vậy .. Guid a = Guid.Parse (HttpContext.Current.Session ["Session_Id"]. ToString()), và sau đó tôi đọc nó vào phía máy khách thông qua hàm jquery ajax. Hãy nhớ rằng nó sẽ cần phải là GET khi bạn chỉ trả về một giá trị – tmutton

+0

Tôi không biết tại sao mọi người bỏ phiếu cho r câu trả lời này. chúng ta không thể có Session trong phương thức tĩnh –

8

Nhiều nhận xét:

  1. Bạn không thể "truy cập phiên từ jQuery". Bạn sử dụng MVC và asp.net để tạo một trang HTML (có JavaScript). Session là một đối tượng phía máy chủ và JavaScript chạy ở phía máy khách.
  2. Hãy xem jQuery's selectors. Chúng có các bộ chọn hữu ích như :checkbox, :text, v.v.
  3. Mã của bạn tạo JavaScript bạn mong đợi: nó biên dịch, chạy và tạo JavaScript với true hoặc false ở đúng nơi.
  4. Đây không phải là cách để vô hiệu hóa phần tử. Nếu một phần tử có thuộc tính 'disabled', nó sẽ bị vô hiệu hóa, bất kể giá trị là bao nhiêu. <input type="checkbox" disabled="false" /> cũng là một hộp kiểm bị vô hiệu hóa, vì vậy các điều khiển của bạn luôn bị tắt.
  5. Nếu đó là cách bạn chọn dù sao, xem xét:

    var isCoBrowse = <%= Session["Name"].ToString().ToLower() %>; 
    if(!isCoBrowse) //disable controls 
        $(":text,:checkbox,:radio").attr("disabled","disabled"); //standard. 
    

    này sẽ sản xuất các client-side mã JavaScript:

    var isCoBrowse = true; 
    

    Và, để cho phép một yếu tố:

    $("input").removeAttr("disabled"); 
    

Ngoài ra, có nhiều cách tốt hơn để hoàn thành điều này. Bạn đã xem xét việc vô hiệu hóa các điều khiển trên phía máy chủ, nếu có thể?

+1

var isCoBrowse = <% = Session ["Name"]. ToString(). ToLower()%>; sai cú pháp – sarsnake

+0

# 1 - Câu trả lời sai (ví dụ: tìm kiếm var = @Session ("MyValue") hoạt động) –

+1

@EdDeGagne - Tôi không viết ở điểm 5 sao? JavaScript không thể truy cập trực tiếp phiên và thậm chí không biết có phiên. Sử dụng phiên làm việc, như phía máy chủ, để tạo JavaScript, là một cái gì đó hoàn toàn khác. – Kobi

1

Nếu biến phiên đó là dữ liệu nhạy cảm (trong trường hợp này có thể là không), tôi sẽ không sử dụng giải pháp này vì nó sẽ hiển thị dữ liệu Phiên khi bạn xem nguồn javascript. Nếu đó là dữ liệu phiên nhạy cảm, việc truy cập dữ liệu qua phương thức web (xem câu trả lời ở trên) có lẽ là tốt nhất.

5
<input id="sessionInput" type="hidden" value='<%= Session["name"] %>' /> 

var getSessionValue = $('#sessionInput').val(); 
-1

Dễ dàng! khi bạn biết cách:

@ Html.Encode (Phiên ("phân loạiTiêu đề"))

... và trong.js file:

var classificationTitle = document.getElementById('classificationTitle').innerHTML; 

xin lỗi - Tôi không thể gửi toàn bộ html như trang web này dải ra dấu ngoặc nhọn :(

Các vấn đề liên quan