我需要帮助才能使用javascript从服务器到客户端获取特定的数据表值。
实施例。 在我的类Countries.aspx.cs中,我在我的代码上的某个地方说在页面加载上。
DataTable dtbCountries = Repository.GetAllCountries;
我的dtbCountries现在包含此记录
ID Country
1 HongKong
2 Japan
3 Korea
在我的网络表单中,我想使用javascript
获取我的dtbCountries的值<script type="text/javascript">
// my code here to get the dtbCountries values
</script>
我该怎么办?或者在客户端暴露我的dtbCountries是最好的做法。
提前致谢!
答案 0 :(得分:2)
你有一些选择。首先,我假设您需要的是实际数据而不是DataTable对象给出的任何功能,因此您最好创建一个实体(可能是struct
)来存储表的数据 - 必须标记Serializable
属性。
您的一个选择是封装在页面方法中检索它。这些方法透明地暴露给JavaScript(即,它们具有与后面的代码中相同的语法)。这些方法必须为static
,并标有PageMethod
属性。
另一种选择是以JSON格式在HTML中“编写”表格内容(用JavaScript表示对象的表示法)。
编辑2 :将内容序列化为JSON的方法是使用类System.Web.Script.Serialization.JavaScriptSerializer
,创建实例并调用.Serialize(<your-serializable-object>)
。
修改:添加了以下(工作)示例...
ASPX 页面:
<script type="text/javascript">// <![CDATA[
function doTest( ) {
try {
PageMethods.test(theForm.qty.value, function( result ) {
var str = '';
for ( var key in result ) {
str += '\t{ '+ key +': '+ result[ key ] +' }\n';
}
alert('Page Method returned the following result:\n'+ (str || "{ }"));
}, function( ex ) {
alert('Page Method returned the following "'+ ex.get_exceptionType() +'" exception:\n'+ ex.get_message());
});
} catch( err ) {
alert('Failed to execute Page Method:\n'+ err);
}
} // void doTest()
// ]]>
</script>
···
<form runat="server" id="form">
<asp:scriptmanager runat="server" enablepagemethods="true" />
<fieldset id="forma">
<legend>WebMethod Test</legend>
<label for="qty">
Number of elements (>= 0):
<input type="text" name="qty" id="qty" value="5" />
</label>
<input type="button" value="Push the button!" onclick="doTest(this)" />
</fieldset>
</form>
并且,在您背后的代码:
using System;
using System.Collections.Generic;
using System.Web.Services;
namespace Tests {
public partial class Test : System.Web.UI.Page {
[WebMethod]
static public IDictionary<string,string> test( int length ) {
if ( 0 > length ) {
throw new ArgumentException( "Length cannot be less than zero", "length" );
}
var result = new Dictionary<string,string>( length );
for ( int i = 0; i < length; i ++ ) {
result.Add(i.ToString(), Char.ConvertFromUtf32(65 + i) +"|"+ Char.ConvertFromUtf32(97 + i));
}
return result;
} // IDictionary<string,string> test( int )
}
}