Tôi tạo ra một new object()
trong Javascript, đặt một số giá trị vào nó và đưa nó cho một PageMethod
...Tiếp nhận đối tượng năng động trong PageMethod từ javascript
var filters = new object();
filters.Name = $("#tbxName").val();
filters.Age = parseInt($("#tbxAge").val());
PageMethods.getPeople(filters, getPeopleCallback);
... trong đó, chữ ký của nó, nhận được một dynamic
tranh luận.
[WebMethod]
public static object getPeople(dynamic filters)
{
...
Toàn bộ mã biên dịch và chạy không có vấn đề, trừ PageMethod phía máy chủ, mà hiểu được thông số dynamic
như một Dictionary
.
Khi tôi gỡ lỗi mã để xem định nghĩa của đối tượng filters
, nó cho thấy tôi các loại sau đây: filters = {System.Collections.Generic.Dictionary<string,object>}
Vì vậy, thỏa thuận cách duy nhất với nó là sử dụng nó như là một Dictionary
...
var name = filters["Name"];
var age = filters["Age"] as int?;
.. Nhưng ý định của tôi là sử dụng nó như là một đối tượng động
var name = filters.Name;
var age = filters.Age;
tôi biết rằng đây không phải là một vấn đề lớn tại al l, và hoàn toàn không có vấn đề gì khi tôi truy cập nó như một từ điển (và tôi cũng biết mình có thể tạo một "Proxy" DynamicObject
để truy cập từ điển như một đối tượng động).
Tôi chỉ muốn hiểu điều này. Vì vậy:
- Tại sao PageMethod hiểu nó là Từ điển?
- Có cách nào để thực hiện công việc này dưới dạng đối tượng Động (ngoại trừ phương pháp "Proxy") không?
Tôi đã hy vọng rằng điều này có thể làm việc vì tôi thường xác định những Filter
Lớp học trên Server Side và tạo ra nó trong Javascript sau cùng cấu trúc, và PageMethod hiểu nó và chuyển đổi nó một cách chính xác khi tôi xác định loại đó như là một lập luận (ví dụ: getPeople(Filters filters)
). Vì vậy, tôi đã tự hỏi nếu nó có thể làm điều đó cũng với các đối tượng năng động (tiết kiệm thời gian và các lớp học không cần thiết).
Tôi đánh giá cao thời gian và trợ giúp của bạn.
Tôi sẽ ngạc nhiên nếu 'PageMethod' hiểu' động'. 'PageMethod' là dịch vụ web kiểu ASMX kế thừa, đã ở trạng thái" cũ "kể từ trước khi' dynamic' tồn tại. Ngoài ra, nói chung, bạn nên chuyển dữ liệu cụ thể cho nền tảng cho các dịch vụ web và 'dynamic' là cụ thể cho .NET. –
@JohnSaunders: Hãy ngạc nhiên sau đó. ASMX và các phương thức trang hoạt động tốt với các giá trị trả về 'dynamic' được gõ. Quan trọng hơn, WCF/DCJS không xử lý các tham số đầu vào 'dynamic' nào tốt hơn ASMX/JSS, điều này khiến cho ASMX cũ và WCF tranh luận về điểm moot để đưa ra. –
@DaveWard: trong trường hợp này, trong đó 'dynamic' được sử dụng làm thông số đầu vào? Ngoài ra, trong trường hợp của một giá trị trả về, một trả về 'dynamic' trông như thế nào với một máy khách SOAP? Hay bạn chỉ đề cập đến REST? Ngoài ra, bạn có thể nói những gì bạn có nghĩa là "hoạt động tốt"? Tôi nói "hiểu". –