最近同事問用ASP.NET AJAX Call Web Service可以傳回DataTable嗎?現在公司專案的後台很多都直用AJAX作掉,達到非同步的效果,目前公司的作法是用Web Service回傳一個 List 到前端給JavaScript作Parse,Parse過程花調許多程式與效能,所以問題來了,如果能直接傳回DataTable該有多好啊!?
最近同事問用ASP.NET AJAX Call Web Service可以傳回DataTable嗎?
現在公司專案的後台很多都直用AJAX作掉,達到非同步的效果,
目前公司的作法是用Web Service回傳一個 List 到前端給JavaScript作Parse,
Parse過程花調許多程式與效能,所以問題來了,如果能直接傳回DataTable該有多好啊!?
是的,要回傳DataTable其實是可行的,使用ASP.NET 2.0 AJAX Futures 的確有方法可以作到,
只不過,該Solution目前還是CTP,且滿久了,不知何時才會發佈正式版,還是石沉大海了?
後來我提出了一個解決方案,也可以達到"感覺像"傳回一個DataTable,那就是使用JSON,
這裡使用一個C# Class來作解析,可直接傳入DataTable到這個類別裡的Method當參數,
該Method會教這個DataTable提煉成JSON的Format String,所以該Web Service回傳型別是一個String Type,
C# Class (DT2JSON) 如下:

002

003

004

005

006

007

008

009

010

011

012

013

014

015

016

043

044

045

017

018

019

020

038

039

040

041

021

022

023

024

025

026

027

028

029

030

031

032

033

034

035

036

037

042

046

047

048

049

050

051

052

053

054

055

056

057

058

084

085

086

059

060

061

062

079

080

081

082

063

064

065

066

067

068

069

070

071

072

073

074

075

076

077

078

083

087

088

089

090

091

092

093

094

095

096

097

098

099

100

101

102

103

104

105

131

132

133

106

107

108

109

126

127

128

129

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

130

134

135

136

137

138

139

Web Service Method使用方式:

02

03

04

05

06

07

08

09

10

11

12

13

14

ASPX JavaScript 使用方式,這裡是採jQuery的作法,JavaScript作法也差不多,
呼叫用法可以參數C# Class,我有寫在註解裡。
這裡引進了3個JS File
第一個是jQuery主程式
第二個是可以讓VS 2008 SP1支援jQuery intellisense
第三個是jQuery Plugin,用它來Parse JSON (下載)

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

就這樣,簡簡單單就可以調用JSON的資料,網頁間傳遞資料使用JSON真的挺方便的,
值得一提的是JSON的速度比較快,用起來感覺像Array,而XML呢?雖然速度比JSON慢一滴滴,
但能表現的資料格式可就非常強大的柳!