<%@ WebHandler Language="C#" Class="Fsll.AJAX_ForDDL" %>
using System;
using System.Web;
using System.Web.SessionState;
using System.Reflection;
using System.Data;
using System.Text;
//using Framework.Common.Extensions;
namespace Fsll
{
/*----------------------------- Demo -----------------------------
$.post("/RMS/RequirementManage/AJAX_ForDDL.ashx?cmd=Test",function(data){
if(data!=null && data.indexOf("[error]")!=-1){
//处理错误
return;
}
//处理数据
$("#ddlTest").html(data);
},"html");
*/
/// <summary>
/// Author : yenange
/// Description: 专用于处理AJAX请求, 填充下拉列表的一般处理程序
/// Demo : 如上, 本文件对应 Test() 方法
/// Remark : 此类是公用的ajax请求页,为了简洁与效率,每个方法的方法体请不要超过 4 行。业务逻辑和取数据,请放在BLL层
/// Date : 2012-08-07
/// </summary>
public class AJAX_ForDDL : IHttpHandler, IReadOnlySessionState
{
public AJAX_ForDDL()
{
//初始化Request等
Init();
}
public void ProcessRequest(HttpContext context)
{
#region [ 根据Reqeust["cmd"]来执行相应的方法 ]
try
{
String methodName = Request["cmd"];
Type type = Type.GetType("Fsll.AJAX_ForDDL");
object instance = Activator.CreateInstance(type);
MethodInfo method = type.GetMethod(methodName);
if (null != method)
{
method.Invoke(instance, null);
}
}
catch (Exception ex)
{
outputString = "[error]";
}
#endregion
//输出结果
ResponseWriteResult();
}
#region [ 执行方法. 1.方法名必须与QueryString中的cmd=xxx对应; 2.必须是public类型; 3.输出的内容必须赋给outputString ]
public void Test()
{
//下面注释去掉即可测试:有异常时的处理
//throw new Exception("异常测试的信息!");
DataTable dt = new DataTable("Test");
DataColumn dc1 = new DataColumn("ID");
DataColumn dc2 = new DataColumn("Name");
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
for(int i=0;i<3;i++)
{
DataRow dr = dt.NewRow();
dr["ID"] = i;
dr["Name"] ="测试名字"+i.ToString();
dt.Rows.Add(dr);
}
//上面做的, 只是取得测试的 DataTable 而已, 正常情况下, 应该从 BLL 层取得DataTable即可。
//根据DataTable取得对应的html, 并放到outputString供输出.
GeneralOptionHtmlForDT(dt,"ID","Name", TopOption_All);
}
#endregion
#region [ Tools ]
protected HttpRequest Request;
protected HttpResponse Response;
protected HttpServerUtility Server;
protected HttpSessionState Session;
protected readonly String ContentType = "text/plain";
protected readonly String TopOption_Select = "<option value=''><--请选择--></option>";
protected readonly String TopOption_All = "<option value=''><--全部--></option>";
protected static String outputString; //必须为static
private void Init()
{
Request = HttpContext.Current.Request;
Response = HttpContext.Current.Response;
Server = HttpContext.Current.Server;
Session = HttpContext.Current.Session;
outputString = "[error]";
}
public bool IsReusable
{
get
{
return false; //必须为false
}
}
/// <summary>
/// 输出结果
/// </summary>
public void ResponseWriteResult()
{
Response.ContentType = this.ContentType;
Response.Write(outputString);
}
/// <summary>
/// 产生下拉列表项的html, 并赋给输入字符串outputString
/// </summary>
/// <param name="dt"></param>
/// <param name="valueField"></param>
/// <param name="textField"></param>
/// <param name="topOptionHtml">第1个option的html</param>
public void GeneralOptionHtmlForDT(DataTable dt, String valueField, String textField, String topOptionHtml)
{
StringBuilder sb = new StringBuilder();
if (!String.IsNullOrEmpty(topOptionHtml)) {
sb.Append(topOptionHtml);
}
foreach (DataRow dr in dt.Rows)
{
sb.AppendFormat("<option value='{0}'>{1}</option>", dr[valueField] as String, dr[textField] as String);
}
outputString = sb.ToString();
}
#endregion
}
}
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default7.aspx.cs" Inherits="Default7" %>
<!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="jquery/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
var $ddlTest=$("#<%=this.ddlTest.ClientID %>");
$.post("AJAX_ForDDL.ashx?cmd=Test",function(data){
if(data!=null && data.indexOf("[error]")!=-1){
//处理错误
alert("出错了!!");
return;
}
//处理数据
$ddlTest.html(data);
},"html");
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="ddlTest" runat="server">
</asp:DropDownList>
</div>
</form>
</body>
</html>