2009-08-19 44 views
6

Tôi đang cố đọc giá trị của thuộc tính C# từ mã của tôi phía sau tệp vào một số tập lệnh JQuery (xem bên dưới). Bộ chọn JQuery Tôi đã viết truy cập một GridView ASP.Net và sau đó là một trường CheckBox trong GridView. Bất cứ khi nào một hộp kiểm được chọn hoặc bỏ chọn, mã được nhấn, nhưng tôi cần truy cập thuộc tính C# từ mã phía sau để thực hiện hành động thích hợp dựa trên giá trị của thuộc tính.Đọc thuộc tính C# vào mã JQuery

$(".AspNet-GridView-Normal > td > input").click(function() { 

     //Need to access the C# property here 

     //Take action here based on the value of the C# property 

    }); 
+0

Tôi đã làm điều này trong Rails. Rails cho phép bạn gửi các câu trả lời javascript tới các yêu cầu AJAX - sau đó nó được thực thi sau khi nó được nhận. Tuy nhiên, mã tạo javascript này có thể có các câu lệnh ruby ​​nhúng tùy ý (ví dụ như truy cập thuộc tính để xác định đầu ra). Bạn có thể tìm kiếm nếu ASP.Net hỗ trợ một cái gì đó như thế. Thuộc tính C# chỉ tồn tại ở phía máy chủ nên logic này phải được thực hiện thông qua xử lý phía máy chủ. – Gishu

+0

Bạn có cần sửa đổi giá trị khi các hộp kiểm được nhấp không? Vì vậy, nếu bạn bắt đầu với AvailableInstalls thiết lập để 10, bạn sẽ cần phải tăng/giảm biến khi hộp kiểm được nhấp? –

+0

Có, biến sẽ cần phải được giảm đi mỗi khi một hộp kiểm được chọn, và tăng lên mỗi khi một hộp kiểm được bỏ chọn. –

Trả lời

12

Điều này có thể nói rõ ràng, nhưng mã phía sau không tồn tại ở phía máy khách nơi mã jQuery của bạn đang thực thi. Những gì bạn có thể làm là gán giá trị của thuộc tính cho một trường ẩn ở phía máy chủ để khi bạn cần kiểm tra nó với jQuery ở phía máy khách, nó sẽ có sẵn. Vì vậy, bạn có thể làm như sau ở phía khách hàng.

Markup:

<asp:HiddenField ID="hfValueINeedToKnow" runat="server"/> 

Mã Đằng sau:

hfValueINeedToKnow.Value = <some value>; 

jQuery:

$("#<%= hfValueINeedToKnow.ClientID %>").val(); 

Bạn có thể cần phải thực hiện một số thay đổi nhỏ để hỗ trợ giá trị cho mỗi hàng của lưới điện , nhưng hy vọng điều này giải thích ý tưởng chung.

+0

Tôi đang gặp sự cố khi đọc giá trị của HiddenField, dưới đây là mã JQuery tôi đang sử dụng để truy cập: var availableInstalls = $ ("# <% = hfAvailableInstalls.ClientID%>"). Val(); và tôi đang đặt giá trị của trường bị ẩn thành "2" trong phương thức PageLoad trong mã phía sau, nhưng tôi luôn nhận được giá trị "không xác định" cho var AvailableInstalls khi tôi đi qua trong chế độ gỡ lỗi. Bất kỳ ý tưởng gì có thể gây ra điều này? –

+0

@ Russ Clark - những gì đang xuất hiện trong HTML của bạn cho trường nhập ẩn và giá trị được hiển thị thực tế trong bộ chọn jQuery? –

+0

Về điểm này, thực sự hữu ích. Cảm ơn bạn. Đã tìm kiếm sự phá vỡ hành động này trong một thời gian. – wilsonlego

1

Bạn không thể.

Bạn cần hiển thị thuộc tính C# trong một số phần tử (có thể là trường ẩn) và sau đó xem xét theo cách đó.

Nhưng giải thích thêm: Bạn đang cố gắng kiểm tra tài sản nào?

+0

Tài sản chỉ là một int trong mã phía sau, như thế này: int công cộng AvailableInstalls {get; bộ; } –

+0

Đúng, hãy làm theo cách ẩn trường. Mark Kanof đã cho bạn mã chính xác để làm điều đó. –

0

Điều tôi đã làm cho kịch bản này trước đây là in giá trị mã của tôi vào đánh dấu và lưu trữ bất kỳ giá trị nào trong biến javascript, do đó tạo bản sao của nó cho mã phía máy khách. Đây là một ví dụ ngớ ngẩn, nhưng hy vọng điều đó có ý nghĩa:

<% 
    var messsge = "Hello World!" 
%> 

<html> 
<head> 
<script type="text/javascript"> 
    function ShowMessage() 
    { 
     var msg = '<%= message %>'; 
     if(msg) 
      alert(msg); 
    } 
</script> 
</head> 
</html> 
2

Bạn đã đề cập trong nhận xét rằng giá trị là int. Và tôi thấy đó cũng là thuộc tính public trong codebehind của bạn. Điều này là tầm thường bây giờ - bạn không cần phải thoát khỏi giá trị, cũng như không truy cập vào giá trị đó, và bạn nhận được loại an toàn miễn phí:

<script> 
$(".AspNet-GridView-Normal > td > input").click(function() { 

    var AvailableInstalls = <%= AvailableInstalls %>; 

}); 
</script> 
+0

Dựa trên nhận xét sau từ OP "biến sẽ cần phải được giảm đi mỗi khi một hộp kiểm được chọn, và tăng lên mỗi lần một hộp kiểm được bỏ chọn" khai báo biến JS bên ngoài hàm, nhưng điều này sẽ hoạt động tốt. –

0

Không có cách nào thực sự sạch sẽ điều này. Đặt cược tốt nhất của bạn có lẽ sẽ là sử dụng chức năng ClientScript.RegisterClientScriptBlock được tích hợp vào ASP.NET. Here's a good primer.

private int myValue; 

protected void Page_Load(object sender, EventArgs e) { 
    ClientScript.RegisterClientScriptBlock(typeof(Page), 
     "vars", "<script>var myParams = { p1: " + myValue + ", p2: 'My Name' };</script>"); 
} 

Điều này sẽ đặt tập lệnh được cung cấp trên trang của bạn lên đầu biểu mẫu. Bạn cũng có thể thay đổi điều đó. Rõ ràng, nó không phải là đẹp nhất; bạn về cơ bản là chuỗi nối một ngôn ngữ khác, nhưng nó sẽ làm việc, và cho khai báo biến đơn giản không quá thô trên mắt.

0

ASP Nhúng trong JavaScript luôn làm cho tôi lo lắng từ quan điểm của các cuộc tấn công tiêm script và không có khả năng kiểm tra đơn vị JavaScript của bạn.

build này có được nhờ một câu trả lời ealier:

<script type="text/javascript"> 
$(".AspNet-GridView-Normal > td > input").click(function() { 

    var AvailableInstalls = $("#MyHidden").val(); 

}); 
</script> 

Bạn có thể di chuyển nó đến một biến ẩn:

<input type="hidden" id="#MyHidden" value="<%= AvailableInstalls %>" /> 

Tuy nhiên điều này không có được xung quanh vấn đề tiêm. Vì vậy, bạn có thể thêm một biến ẩn phía máy chủ và đặt nó từ hàm sự kiện Page_Load trong ASP.NET.

(P. bạn cũng cần loại thuộc tính = "text/javascript" trong thẻ tập lệnh của bạn để làm cho HTML hợp lệ).

0

Nếu bạn sẽ đặt giá trị của bạn thành một asp: HiddenField với id hfValueINeedToKnow, cách đơn giản nhất để lấy phía khách hàng giá trị này là

var jsvar = $("[id$=hfValueINeedToKnow]").val(); 

Vì vậy, bạn cũng có thể đặt mã này trong một file .js riêng biệt.

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