小研究了一下如何用Ajaxdll實現上一個例子很沮喪因為使用人家的方法更簡單代碼更少而且僅僅是它的皮毛而已所以如果做項目要用到Ajax建議研究一下框架比如說Ext它的類庫和文檔相當豐富簡單易上手
好吧我把實現過程列出來首先我們需要一個Ajaxdll文件這個自己去找吧!放到項目中並添加好引用首先你需要一個類隨意命名為AjaxMethodcs代碼如下
namespace TestAjaxTest
{
/// <summary>
/// AjaxMethod 的摘要說明
/// </summary>
public class AjaxMethod
{
public AjaxMethod() {}
//數據庫查詢操作
[AjaxAjaxMethod(AjaxHttpSessionStateRequirementRead)]
public DataSet GetList(string id)
{
string sql = select CityNameCityCode from City where [ID]= + id;
return SelectData(sql); //調用下面的方法
}
//
private DataSet SelectData(string sql)
{
//數據庫鏈接定義
//nfig中<configuration><appSettings></appSettings></configuration>
//中添加定義<add key=ConnectionString value=data source=localhost;
// initial catalog=helpdesk; user id=sa; password=sa; ></add>
string cs = SystemConfigurationConfigurationSettings AppSettings[ConnectionString];
//或者直接這樣定義
//string cs = Server=(local);UID=sa;PWD=sa;Database=HelpDesk;
SqlDataAdapter sda = new SqlDataAdapter(sqlcs);
DataSet ds = new DataSet();
sdaFill(ds);
return ds;
}
}
}
接下來是你要實現效果的頁面aaspx<body>部分很簡單
<body>
<form id=Form method=post runat=server>
<select id=AList onchange=GetBList()>
<option value=>A</option>
<option value=>B</option>
<option value=>C</option>
</select>
<select id=BList></select>
</form>
</body> 當頁面觸發onchange事件便進入了GetBList()方法下面是該頁面完整的js <script language=javascript>
function GetBList() {
//調用數據庫操作方法
var av = documentgetElementById(AList)value;
// 調用AjaxMethod類的方法至於這裡有兩個參數猜想是一個委托// 將GetList執行結果DataSet傳遞給SetBList方法隱藏了AjaxMethodGetList(av SetBList);
}
function SetBList(response) {
if(response != null) { var ds = responsevalue; // 返回集
// 這裡很有特色開始我感覺出錯了怎麼js的語法規則跟c#一樣啊// 可見Ajaxdll裡面的正則應該寫的暴強!不過有一點讓人感覺不爽// 我在測試時將dsTables[]Rowslenght寫成了dsTables[]RowsCount // js會找不到對象的錯誤
// 如此等於我們還是要習慣它的規則畢竟不完全是c#它只是定義了一種跟c#
//非常接近的語法規則而已
if(ds != null && typeof(ds) == object && dsTables != null) { alert(dsTables[]Rowslength);
for(var i=;i<dsTables[]Rowslength;i++) { var option = documentcreateElement(OPTION);
optionvalue = dsTables[]Rows[i]CityCode;
optiontext = dsTables[]Rows[i]CityName;
documentFormBListoptionsadd(option);
}
}
}
}
</script>
如此例子便結束了很多繁復的操作都封裝了我們學到的只是如何用僅此而已不過在我們趕項目的時候確實能帶來很多的方便
補充按照上面的方式配置會得到一個異常就是無法識別AjaxMethod類的異常我們需要在頁面的後台cs文件中添加定義AjaxUtilityRegisterTypeForAjax(typeof(完整命名空間AjaxMethod));
除了這裡要添加注冊定義之外我們還需要在nfig中添加
<httpHandlers>
<add verb=POSTGET path=ajax/*ashx type=AjaxPageHandlerFactory Ajax />
</httpHandlers>
延伸我們完全可以將AjaxMethod寫成一個公共Page將調用業務層代碼的方法添加進來如此便可以不用在那裡面定義數據庫鏈接了——我們要得到的僅僅是一個DataTable而不必關心用什麼樣的方式得到它這樣的設計與項目框架的結合將更緊密
From:http://tw.wingwit.com/Article/program/net/201311/13412.html