我依照http://msdn.microsoft.com/zh-cn/magazine/cc546561.aspx里面的方法,用MarkUpBuilder类做了一个独立刷新的页面,例子中用XML数据岛<xml id = item ><tr><td></td><td></td></tr></xml>这样比较好绑定数据,但是现在,我的table样式有特殊的要求,它的部分TD里面是要每秒刷新的数据,另一些是一些user控件,请问这样如何将数据绑定到客户端的table中,谢谢!
解决方案 »
- 把99.ASPX这个页面重写成99.HTML, 会员登陆后又返回到99.ASPX了
- 怎么修改studio2008根目录
- 请教高手 这样的分类用c#如何实现!
- 大家在项目的那些地方应用的ajax?
- 难倒我啦!!!如何跳到页头
- 建立项目时出错,请各位帮我看看
- 语法错误:“,”运算符前缺少操作数。
- 动态为一个RadioButtonList邦定数据,再选择需要的选项,提交时却无法得到选择的值?
- 急! 调用word的替换功能。为什么只有第一次成功??
- 问个超难的问题:用户不想安装IIS还能不能运行Asp.net的程序??
- 想把ASP.NET页面GridView控件中的数据导出到Excel表格中
- 字段自动补0
BOSS是个老外,很BT的。
如果指的
IE->IIS->IE
使用POST方式访问WebService 数据传输量最小
将所有需要准备的数据一次返回的,这样数据量也最小.
当然了,你可以自定义访问 WebService的js
也非常之简单
今天上午写的点东西,你可以看一下了解一下
jscript.js中的内容
//定义请求数据
var webServiceUrl = "/Reporter/WebService.asmx";
//uri 命名空间
var webServiceUri = "http://tempuri.org/";
//方法名
var methodGetAllType = "GetAllTypes";
//soap的访问方式可以参照 WebService.asmx 页面下的提示,拷贝过来替换相应的值
//soap 访问的时候参数调用方式
var methodGetAllTypeSoapContent = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <GetAllTypes xmlns="http://tempuri.org/" /> </soap:Body></soap:Envelope>';//定义访问类
function CreateXmlHttp() {
this.XMLHTTP = window.attachEvent ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest();
this.Method = "POST";
this.URL = webServiceUrl;
this.URI = webServiceUri;
this.MethodName = methodGetAllType;
this.MethodSoapContent = methodGetAllTypeSoapContent;
this.Headers = null;
this.OnPostBack = null;
this.Send = function() {
if (this.XMLHTTP == null) {
alert("浏览器不支持动态创建异步XMLHTTP对像");
return;
};
var tempObject = this;
this.XMLHTTP.onreadystatechange = function() {
if (typeof (tempObject.OnPostBack) == "function") {
tempObject.OnPostBack(tempObject.XMLHTTP);
}
}
this.XMLHTTP.open(this.Method, this.URL, true);
this.XMLHTTP.setRequestHeader("SOAPAction", this.URI + this.MethodName);
this.XMLHTTP.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
this.XMLHTTP.send(this.MethodSoapContent);
};
};下面是页面中的调用<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title> <script src="js/JScript.js" type="text/javascript"></script>
<script language="javascript"> function InitTypes(context) {
if (context.readyState == 4) {
var result = context.responseXML.getElementsByTagName("soap:Body")[0].text;
var array = result.split(";")
var container = document.getElementById("cardtype");
for (var i = 0; i < array.length; i++) {
var oOption = document.createElement("OPTION");
oOption.text = array[i];
oOption.value = array[i];
container.add(oOption);
}
}
}
var types = new CreateXmlHttp();
types.OnPostBack = InitTypes;
types.Send();
</script></head>
<body> <div>
<select id="cardtype" onchange="typechanges(this)">
</select>
</div></body>
</html>
下面是WebService.asmx中的内容
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;
using Reporter;
using System.Data.SqlClient;
using System.Text;/// <summary>
///WebService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService { public WebService () { //如果使用设计的组件,请取消注释以下行
//InitializeComponent();
} [WebMethod]
public string GetAllTypes() { SqlConnection sqlCon = new SqlConnection(Config.ConnectionString);
SqlCommand sqlCmd = sqlCon.CreateCommand();
sqlCmd.CommandText = " select [name] from sysobjects where xtype = 'U' and right(name,6) <> '_items' ";
sqlCon.Open();
SqlDataReader dr = sqlCmd.ExecuteReader();
StringBuilder sb = new StringBuilder(1024);
while (dr.Read())
{
sb.Append(dr.GetString(0).TrimEnd());
sb.Append(";");
}
dr.Close();
sqlCon.Close();
return sb.ToString().TrimEnd(new char[] { ';' });
}
}
如下所示SOAP 1.1
以下是 SOAP 1.2 请求和响应示例。所显示的占位符需替换为实际值。POST /Reporter/WebService.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/GetAllTypes" <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetAllTypes xmlns="http://tempuri.org/" />
</soap:Body>
</soap:Envelope>
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetAllTypesResponse xmlns="http://tempuri.org/">
<GetAllTypesResult>string</GetAllTypesResult>
</GetAllTypesResponse>
</soap:Body>
</soap:Envelope>
其中 jscript.js中URL 对应 /Reporter/WebService.asmx this.XMLHTTP.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
对应
Content-Type: text/xml; charset=utf-8this.XMLHTTP.setRequestHeader("SOAPAction", this.URI + this.MethodName);
对应
SOAPAction: "http://tempuri.org/GetAllTypes"
methodGetAllTypeSoapContent
对应
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetAllTypes xmlns="http://tempuri.org/" />
</soap:Body>
</soap:Envelope>
页面中返回值对应Response,我就不写了
就是客户端数据不能合理显示呀,因为MarkupBuilder类里面的_generat方法得重写,可是我现在都想不出有什么更好的实现方法,MarkupBuilder.js是这样写的:
//
// Jadi.MarkupBuilder
//Type.registerNamespace('Jadi');
// Class ctor
// This code gets called when you instantiate this class
Jadi.MarkupBuilder = function Jadi$MarkupBuilder()
{
// Calls the base ctor, if any
Jadi.MarkupBuilder.initializeBase(this);
// Initializes the private members
this._header = "";
this._footer = "";
this._itemTemplate = "";
}
Jadi.MarkupBuilder = function Jadi$MarkupBuilder(header, footer)
{
// Calls the base ctor, if any
Jadi.MarkupBuilder.initializeBase(this);
// Initializes the private members
this._header = header;
this._footer = footer;
this._itemTemplate = "";
}// PROPERTY:: header: string
function Jadi$MarkupBuilder$get_header() {
if (arguments.length !== 0) throw Error.parameterCount();
return this._header;
}
function Jadi$MarkupBuilder$set_header(value) {
var e = Function._validateParams(arguments, [{name: 'value', type: String}]);
if (e) throw e; this._header = value;
}// PROPERTY:: footer: string
function Jadi$MarkupBuilder$get_footer() {
if (arguments.length !== 0) throw Error.parameterCount();
return this._footer;
}
function Jadi$MarkupBuilder$set_footer(value) {
var e = Function._validateParams(arguments, [{name: 'value', type: String}]);
if (e) throw e; this._footer = value;
}// PROPERTY:: itemTemplate: string
function Jadi$MarkupBuilder$get_itemTemplate() {
if (arguments.length !== 0) throw Error.parameterCount();
return this._itemTemplate;
}
function Jadi$MarkupBuilder$set_itemTemplate(value) {
var e = Function._validateParams(arguments, [{name: 'value', type: String}]);
if (e) throw e; this._itemTemplate = value;
}
// METHOD:: bind()
function Jadi$MarkupBuilder$bind(data, callback) {
var temp = this._generate(data, callback);
return temp;
}// METHOD:: loadHeader()
function Jadi$MarkupBuilder$loadHeader(domElement) {
var temp = domElement.innerHTML;
this._header = temp;
}// METHOD:: loadFooter()
function Jadi$MarkupBuilder$loadFooter(domElement) {
var temp = domElement.innerHTML;
this._footer = temp;
}// METHOD:: loadItemTemplate()
function Jadi$MarkupBuilder$loadItemTemplate(domElement) {
var temp = domElement.innerHTML;
this._itemTemplate = temp;
}/////// ///////
/////// PRIVATE members ///////
/////// ///////function Jadi$MarkupBuilder$_generate(data, itemCallback)
{
var pattern = /#\w+/g; // Finds all #word occurrences var _builder = new Sys.StringBuilder(this._header);
for(i=0; i<data.length; i++)
{
var dataItem = data[i];
var template = this._itemTemplate; var matches = template.match(pattern);
for (j=0; j<matches.length; j++)
{
var text = matches[j];
var memberName = text.slice(1);
// Invoke a callback to further modify the data to be bound
var memberData = dataItem[memberName];
var temp = memberData;
if (itemCallback !== undefined)
{
temp = itemCallback(memberName, dataItem);
}
template = template.replace(matches[j], temp);
}
_builder.append(template);
}
_builder.append(this._footer);
// Return the up
var up = _builder.toString();
return up;
}/*function Jadi$MarkupBuilder$loadItems(domElement[] , Sys.StringBuilder _builder) {
for(int i =0;i<docElement.length;i++)
var temp = domElement[i].innerHTML;
this._footer = temp;
}
*/// Class PROTOTYPE
Jadi.MarkupBuilder.prototype =
{
get_header: Jadi$MarkupBuilder$get_header,
set_header: Jadi$MarkupBuilder$set_header,
get_footer: Jadi$MarkupBuilder$get_footer,
set_footer: Jadi$MarkupBuilder$set_footer,
get_itemTemplate: Jadi$MarkupBuilder$get_itemTemplate,
set_itemTemplate: Jadi$MarkupBuilder$set_itemTemplate,
bind: Jadi$MarkupBuilder$bind,
_generate: Jadi$MarkupBuilder$_generate,
loadHeader: Jadi$MarkupBuilder$loadHeader,
loadFooter: Jadi$MarkupBuilder$loadFooter,
loadItemTemplate: Jadi$MarkupBuilder$loadItemTemplate
}Jadi.MarkupBuilder.registerClass('Jadi.MarkupBuilder');