2009-02-23 38 views
24

Tôi biết rằng tôi có thể gọi một phương thức trang với jquery bằng cách sử dụng cú pháp saugọi một phương thức trang ascx sử dụng jquery

$.ajax({ 
    type: "POST", 
    url: "Default.aspx/GetDate", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
    // Replace the div's content with the page method's return. 
    $("#Result").text(msg.d); 
    } 
}); 

này làm việc cho aspx trang nhưng là nó có thể với ascx trang? (điều khiển web)

Tôi đã thử nó khoảng nửa giờ và vì tôi không thể làm cho nó hoạt động, tôi tự hỏi liệu điều đó có thể xảy ra hay không.

Lưu ý: Chỉ cần được rõ ràng, khi tôi cố gắng gọi trang ascx tôi cập nhật các url trong jquery :)

Trả lời

26

Không, bởi vì điều khiển ascx không đại diện cho URL thực có thể được truy cập từ máy khách. Họ hoàn toàn là phía máy chủ có nghĩa là nhúng vào các trang khác.

Điều bạn có thể muốn làm là chỉ cần có trang aspx cung cấp cùng một đoạn mã html bạn hiện có trong tệp ascx của mình. Một trang aspx không nhất thiết phải cung cấp một tài liệu html đầy đủ (< html> < body> v.v.), nó chỉ có thể hiển thị điều khiển người dùng mà bạn quan tâm.

Chúng tôi sử dụng kỹ thuật này mọi lúc plugin ingrid, yêu cầu url gọi lại cho nội dung bảng.

+0

Tôi sẽ thêm rằng cách bạn cung cấp đoạn mã đó bằng cách bao gồm điều khiển trên trang chứ không phải sao chép mã. –

+0

Nếu điều khiển cũng được sử dụng phía máy chủ, tôi đồng ý hoàn toàn. Tuy nhiên, nếu mục đích là hoàn toàn được sử dụng như là một cuộc gọi lại jQuery, và điều khiển không bao giờ được sử dụng nội tuyến một trang aspx ở phía máy chủ, thì đó chỉ là sự lộn xộn không cần thiết. Trong trường hợp đó, chỉ cần đặt mã trong trang aspx. – Clyde

2

Tôi không nghĩ rằng nó sẽ có thể, như điều khiển người dùng không có thể truy cập từ bên ngoài (bên ngoài trang). Tôi đề nghị chỉ sử dụng một dịch vụ kịch bản (một dịch vụ web).

4

Tôi không nghĩ rằng có thể bằng cách yêu cầu tệp ascx trực tiếp - nghĩa là. cung cấp "MyControl.ascx" làm thông số url thành $ .ajax (..). Tệp ascx không được máy chủ web tiếp xúc trực tiếp.

Bạn có thể, tôi tin rằng, cung cấp url của trang aspx chứa điều khiển người dùng - nghĩa là. nếu một cá thể của MyControl.ascx tồn tại trên MyPage.aspx, bạn sẽ phải cung cấp "MyPage.aspx" làm tham số url. Nghe có vẻ như có thể đánh bại mục đích cho những gì bạn đang cố gắng thực hiện.

EDIT: Những gì Clyde nói dưới đây có vẻ như là một ý tưởng hay. Tôi đang làm một cái gì đó tương tự bản thân mình bằng cách bao gồm kiểm soát ascx trên một trang mà công việc là nhiều hơn hoặc ít hơn chỉ để lưu trữ nó để truy cập từ kịch bản phía máy khách.

+0

Liệu phần đầu tiên ở đây làm việc? Tôi phải gửi dữ liệu JSON đến một hàm trong một tệp ascx.cs và không muốn phải cấu trúc lại mã đánh dấu ascx này và mã vào trang aspx chứa của nó. –

2

Điều gì về việc tạo phương thức trên trang .aspx thực hiện những gì cần với thông tin từ điều khiển? Tôi biết mọi người quay lại và thứ tư về những điều khiển được cho là chứa hoặc không chứa, nhưng nếu điều khiển chỉ chứa các thuộc tính và các đối tượng, tôi nghĩ rằng có chức năng trong trang .aspx có thể làm việc cho bạn. Rõ ràng sẽ có nhiều sự đánh đổi.

1

Tôi sẽ tạo một Trình xử lý chung (.ashx) để tải kiểm soát và viết HTML được hiển thị của nó vào Trả lời.

2

Đây là một cách để vượt qua giới hạn chỉ có các phương thức Trang (ScriptMethod) có sẵn trong các trang ASPX. Ví dụ này xây dựng một proxy bằng cách sử dụng một lớp cơ sở trang và một thuộc tính đặc biệt để trang trí các phương thức trong mã ASCX của trang phía sau của bạn và có các truy cập đó thông qua máy khách.

Creating a Page method (ScriptMethod) within an ASCX user control using AJAX, JSON, base classes and reflection

+4

Dường như liên kết của bạn đã chết. –

0

Bạn có thể viết phương pháp getdate() trong Default.aspx hoặc một tập tin aspx khác VÀ BẠN CÓ THỂ GỌI CHO RẰNG PHƯƠNG PHÁP TỪ ascx FILE.

Ex:

Trong UserControl.ascx:

$.ajax({ 
type: "POST", 
url: "Default.aspx/GetDate", 
data: "{}", 
contentType: "application/json; charset=utf-8", 
dataType: "json", 
success: function(msg) { 
// Replace the div's content with the page method's return. 
$("#Result").text(msg.d); 
} 

});

Trong Default.aspx.cs:

Public void GetDate() //Public static void { //your code here }

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