前兩天在網上下了個ajax組件體驗了一下,感覺很不錯。但后來開始想怎樣能讓它跟server控件交互呢,例如我上輸出一個列表,就只有用js一條一條html的輸出嗎?不!!現在我說說怎樣與 datagrid交互。
注:ajax.net的組件可以到此網下載,我用的是for .net 1.1版本的。http://ajax.schwarz-interactive.de/
1. 在引用中添加引用ajax.dll。(這個很廢話)
2.在web.config中建立httphandler(這個當然是在system.web串里的)
<httphandlers>
<add verb="post,get" path="ajax/*.ashx" type="ajax.pagehandlerfactory, ajax" />
</httphandlers>
3.在global的application_start里加上個設置
protected void application_start(object sender, eventargs e)
{
ajax.utility.handlerpath = "ajax";
}
4.新建一個類demomethods,這個類里面提供了更新數據庫和輸出列表的方法。其實主要思想就是獲得控件運行后生成的html,然后輸出。
1 [ajax.ajaxmethod]
2 public int addajaxtable(string name)
3 {
4 //輸入一個字符串,然后更新
5 sqlconnection conn = new sqlconnection( system.configuration.configurationsettings.appsettings["connectionstring"] );
6 sqlcommand cmd = new sqlcommand("insert into ajaxtable(name) values('"+name+"')", conn);
7 cmd.connection.open();
8 int result = cmd.executenonquery();
9 conn.dispose();
10 cmd.dispose();
11 return result;
12 }
13
14 [ajax.ajaxmethod]
15 public string getajaxtable()
16 {
17 //這個方法就是拿到datagrid生成出來的html
18 sqlconnection conn = new sqlconnection(system.configuration.configurationsettings.appsettings["connectionstring"]);
19 sqlcommand cmd = new sqlcommand("select * from ajaxtable order by id", conn);
20 sqldataadapter ap = new sqldataadapter( cmd );
21 dataset ds = new dataset();
22 ap.selectcommand.connection.open();
23 ap.fill( ds, "db" );
24
25 conn.dispose();
26 cmd.dispose();
27
28 //實例化一個datagird類并設置好數據源
29 datagrid dg = new datagrid();
30 dg.datasource = ds.tables["db"];
31 dg.databind();
32
33 //實例化一個htmltextwriter的類
34 system.text.stringbuilder strb = new system.text.stringbuilder();
35 system.io.stringwriter sw = new system.io.stringwriter( strb );
36 system.web.ui.htmltextwriter htw = new htmltextwriter( sw );
37
38 //執行控件的render并輸出到htmltextwriter里
39 dg.rendercontrol( htw );
40
41 string s = strb.tostring();
42
43 return s;//最后就是返回這個html啦
44 }
5.然后再建一個default.js文件,用作存放 js方法 function addajax(name)
{
demomethods.addajaxtable(name);
loadgrid();
}
function loadgrid()
{
var cc=document.getelementbyid("uctd");
cc.innerhtml=demomethods.getajaxtable().value;
}
6.建一個default.aspx,在pageload事件里面加個注冊的東西
private void page_load(object sender, system.eventargs e)
{
ajax.utility.registertypeforajax(typeof(ajaxtestprjlib.demomethods));
}
7.最后就是default.aspx的html和js了,呵呵
<%@ page language="c#" codebehind="default.aspx.cs" autoeventwireup="false" inherits="ajaxtextprjweb._default" %>
<!doctype html public "-//w3c//dtd html 4.0 transitional//en" >
<html>
<head>
<title>default</title>
<meta name="generator" content="microsoft visual studio .net 7.1">
<meta name="code_language" content="c#">
<meta name="vs_defaultclientscript" content="javascript">
<meta name="vs_targetschema" content="http://schemas.microsoft.com/intellisense/ie5">
<script language="javascript" src="default.js"></script>
</head>
<body >
<form id="form1" method="post" runat="server">
<input type="text" id="addtextbox" maxlength="10"><input type="button" value="添加" >
<table>
<tr>
<td id="uctd"></td>
</tr>
</table>
</form>
</body>
</html>
這樣,就能使用datagrid來輸出表格了,呵呵。總體思路其實還是比較簡單的,日后有兄弟做出更好的,請貼出來,而我也會繼續努力的。謝謝....繼續工作去....
原文地址:http://jasmineou.cnblogs.com/archive/2006/01/19/244312.html#320070
三個月之前,我寫了一篇關于ajax.net的post,大家看完之后反響挺大的。于是我一直想再深入研究一下,看看能不能作一些改進,但正在這時候,我的感情生活發生了些很悲慘的事...于是一直無心戀戰。三個月后的現在,我重新拿起久久沒碰過的vs.net,開始重新投入工作和學習。其實我這個也不算是什么研究,我對ajax.net框架的了解和ajax的原理只是很片面,只是我想到別人沒有想的東西罷了,希望大家以后多多交流,希望我這篇post對大家有幫助。
注:這次用的是asp.net2.0,控件是gridview,還在用asp.net1.1的朋友不好意思了。而這次使用的ajax.net框架也有點變動,用了ajaxpro for .net2.0(其實也一樣)。
這次的代碼我就不詳盡啦,因為實在還是比較多的。關于ajax.net的設置可以參照這篇文章ajax.net中與server控件的交互使用(一),demo可以在這里看http://210.21.123.253/ajaxtestprjweb/default.aspx(這是我的機子,大家要愛護啊,不要隨便亂搞啊,demo時間由早上9:30-18:00,還要請大家注意右上角的loading字樣...loading的時候就不要亂按了),源文件就到這里下載http://www.cnblogs.com/files/jasmineou/ajaxtestprj2.0.rar
我解析下具體思想,其實就是將gridview放到一個uc里面,然后將uc的代碼分離去類庫里,然后頁面的ajax向服務器要uc生成出來的html,然后再用javascript寫到頁面里....~其實這個只是單單用ajax實現沒刷新罷了,在性能方面并沒有太多的提高。高手可能會笑我用這些實質上不算是用上ajax....呵呵~這個我承認。
ps:有任何疑問可以加我的qq:50446177,驗證信息寫cnblogs with ajax
新聞熱點
疑難解答
圖片精選