使用ICallbackEventHandler接口实现的轻量级下拉框联动
2008-08-06 10:01
603 查看
基于Asp.Net,用回发实现的下拉框联动,
这是基于DotNet里一个接口:ICallbackEventHandler,通过实现这个接口,让页面有了可以无刷新回发的能力
从而可以实现我们的目的:联动
另外,这个方法也比使用AJAXPro控件来的简单,因为它不用引入控件。
<%@ Page Language="C#" %>
<%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
<!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>
<title>Untitled Page</title>
<script language="C#" runat="server">
public void Page_Load(object sender, EventArgs e)
{
lstProvince.Attributes.Add("onchange", "CallServer(this.value);");
// 取得省份数据,并绑定到省份下拉框
ListItem l_item;
l_item = new ListItem("山东", "1");
lstProvince.Items.Add(l_item);
l_item = new ListItem("江西", "2");
lstProvince.Items.Add(l_item);
l_item = new ListItem("福建", "3");
lstProvince.Items.Add(l_item);
}
public string m_CallbackResult; // 用于传递要返回的Html
// 下面实现接口要求的2个方法
//实现接口后,ajax回发时,会先调用这个方法
public void RaiseCallbackEvent(string eventArgument)
{
// 根据提交过来的省份ID获取城市数据
string[] l_arrCity;
switch (eventArgument)
{
case "1":
l_arrCity = new string[] { "济南", "青岛", "烟台" };
break;
case "2":
l_arrCity = new string[] { "南昌", "吉安", "九江", "赣州","宜春" };
break;
case "3":
l_arrCity = new string[] { "福州", "厦门", "泉州", "三明" };
break;
default:
return;
}
// 先清空全部选项
lstCity.Items.Clear();
// 重新绑定 城市下拉框
foreach (string l_item in l_arrCity)
lstCity.Items.Add(l_item);
// 获取城市下拉框生成的html,并返回它给调用的js
System.IO.TextWriter l_txtWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter l_writer = new HtmlTextWriter(l_txtWriter);
lstCity.RenderControl(l_writer);
m_CallbackResult = l_txtWriter.ToString(); // 把html存入RaiseCallbackEvent,在下面的方法里返回
}
// 执行完RaiseCallbackEvent方法,紧接着会执行这个方法,返回一个字符串,也就是js会收到的东东
public string GetCallbackResult()
{
return m_CallbackResult;
}
</script>
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">
function CallServer(arg){
<%=ClientScript.GetCallbackEventReference(this, "arg", "JsRecieve", null) %>
}
function JsRecieve(ret){
document.getElementById("spnCity").innerHTML = ret;
}
</script>
</head>
<body onload="CallServer(document.getElementById('lstProvince').value)">
<form id="Form1" runat="server">
省份:<asp:DropDownList ID="lstProvince" runat="server"></asp:DropDownList>
<!-- 下面这个spnCity要加上,用于回发时赋innerHTML用 -->
城市:<span id="spnCity"><asp:DropDownList ID="lstCity" runat="server"></asp:DropDownList></span>
</form>
</body>
</html>
这是基于DotNet里一个接口:ICallbackEventHandler,通过实现这个接口,让页面有了可以无刷新回发的能力
从而可以实现我们的目的:联动
另外,这个方法也比使用AJAXPro控件来的简单,因为它不用引入控件。
<%@ Page Language="C#" %>
<%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
<!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>
<title>Untitled Page</title>
<script language="C#" runat="server">
public void Page_Load(object sender, EventArgs e)
{
lstProvince.Attributes.Add("onchange", "CallServer(this.value);");
// 取得省份数据,并绑定到省份下拉框
ListItem l_item;
l_item = new ListItem("山东", "1");
lstProvince.Items.Add(l_item);
l_item = new ListItem("江西", "2");
lstProvince.Items.Add(l_item);
l_item = new ListItem("福建", "3");
lstProvince.Items.Add(l_item);
}
public string m_CallbackResult; // 用于传递要返回的Html
// 下面实现接口要求的2个方法
//实现接口后,ajax回发时,会先调用这个方法
public void RaiseCallbackEvent(string eventArgument)
{
// 根据提交过来的省份ID获取城市数据
string[] l_arrCity;
switch (eventArgument)
{
case "1":
l_arrCity = new string[] { "济南", "青岛", "烟台" };
break;
case "2":
l_arrCity = new string[] { "南昌", "吉安", "九江", "赣州","宜春" };
break;
case "3":
l_arrCity = new string[] { "福州", "厦门", "泉州", "三明" };
break;
default:
return;
}
// 先清空全部选项
lstCity.Items.Clear();
// 重新绑定 城市下拉框
foreach (string l_item in l_arrCity)
lstCity.Items.Add(l_item);
// 获取城市下拉框生成的html,并返回它给调用的js
System.IO.TextWriter l_txtWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter l_writer = new HtmlTextWriter(l_txtWriter);
lstCity.RenderControl(l_writer);
m_CallbackResult = l_txtWriter.ToString(); // 把html存入RaiseCallbackEvent,在下面的方法里返回
}
// 执行完RaiseCallbackEvent方法,紧接着会执行这个方法,返回一个字符串,也就是js会收到的东东
public string GetCallbackResult()
{
return m_CallbackResult;
}
</script>
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">
function CallServer(arg){
<%=ClientScript.GetCallbackEventReference(this, "arg", "JsRecieve", null) %>
}
function JsRecieve(ret){
document.getElementById("spnCity").innerHTML = ret;
}
</script>
</head>
<body onload="CallServer(document.getElementById('lstProvince').value)">
<form id="Form1" runat="server">
省份:<asp:DropDownList ID="lstProvince" runat="server"></asp:DropDownList>
<!-- 下面这个spnCity要加上,用于回发时赋innerHTML用 -->
城市:<span id="spnCity"><asp:DropDownList ID="lstCity" runat="server"></asp:DropDownList></span>
</form>
</body>
</html>
相关文章推荐
- 使用ICallbackEventHandler接口实现的轻量级下拉框联动
- 使用ICallbackEventHandler接口实现页面无刷新
- 使用ICallbackEventHandler 实现异步调用
- ASP.NET无刷新客户端回调(通过实现ICallbackEventHandler接口)
- ASP.Net页面实现ICallbackEventHandler接口,不能工作的问题。
- 在自定义控件中实现ICallbackEventHandler接口不经过回发而实现客户端回掉
- 在自定义控件中实现ICallbackEventHandler接口不经过回发而实现客户端回掉
- 关于使用ICallbackEventHandler接口 ,传递中文时的错误
- 使用ICallBackEventHandler接口,后台使用Response.End问题的解决
- 使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
- 错误是:未能找到回调的目标“__Page”或未实现ICallbackEventHandler
- jQuery使用EasyUi实现三级联动下拉框效果
- asp使用xml文件实现联动下拉框
- 使用each方法实现简单的下拉列表联动
- WebForm使用AngularJS实现下拉框多级联动
- SharePoint 2013 使用查阅项实现联动下拉框
- Jmeter笔记(Ⅱ)使用Jmeter实现轻量级的接口自动化测试
- angular中使用multiselect实现二级下拉联动
- 使用Ajax和Jquery配合数据库实现下拉框的二级联动
- SharePoint 2013 使用查阅项实现联动下拉框