小研究了一下如何用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而不必关心用什么样的方式得到它这样的设计与项目框架的结合将更紧密