最近工作中遇到的问题,内容是从数据库中读取值并赋给前台的几个textbox控件,由于公司使用的自定义控件,原本后台可以轻松实现的问题就只能用Ajax前台实现了,由于我对Ajax不是很熟练,所以记录下来并希望能对有同样问题的小伙伴起一些帮助。
HttpRequest request; HttpResponse response; public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; this.request = context.Request; this.response = context.Response; string ID = this.request["ID"] ?? "";//接受前台js传的参数 string josnString = string.Empty; string sql = string.Empty; DataTable dt = new DataTable(); JsonRow jr = new JsonRow();//声明自定义的类 if (!string.IsNullOrEmpty(ID)) { sql = @"select * from MST_BCS_BUDGET where ID=@ID";//需要查询的sql语句 dt = DataAccess.Instance("BizDB").ExecuteDataTable(sql, ID);//此处使用的自定义sqlhelper类,也可使用其他的,返回datatable类型 if (dt != null && dt.Rows.Count > 0) { jr.ITEMCODE = ConvertUtil.ToString(dt.Rows[0]["BUDGETSHEET"]);//对类里面每个字段进行赋值 jr.PSP = ConvertUtil.ToString(dt.Rows[0]["PSP"]); jr.BUDGETITEM = ConvertUtil.ToString(dt.Rows[0]["GLACCOUNT"]); jr.COSTCENTERCODE = ConvertUtil.ToString(dt.Rows[0]["COSTCENTERNAME"]); } } josnString = MyLib.SerializeUtil.JsonSerialize(jr);//转换成json this.response.Write(josnString); } //自定义一个类,主要用来存值 public class JsonRow { public string ITEMCODE { get; set; } public string PSP { get; set; } public string BUDGETITEM { get; set; } public string COSTCENTERCODE { get; set; } }
上述代码是一般处理程序中的代码,下面还有一个生成自带的类,就没有放上去,主要就是有一个自定义类,这里的类名和我前台需要赋值的控件id一样,差一个前缀,具体作用会在前台说明。这里由于我是只给几个控件赋值,所以没必要使用datatable,并且是一行数据,如果是多行的话这里赋值的过程需要写一个for循环。
接下来是前台js的代码
function onChangerBudget(id) { var url = "/Solution/A06003/Ajax/BudgetHandler.ashx"; var ID = id; if (ID != null && ID != "") { $.ajax({ url: url, type: "POST", async: false, dataType: "json", data: { ID: ID }, success: function (data) { if (data != null && data != "") { for (var k in data) { $("input[id$=fld_" + k + "]").val(data[k]); } } } }); } }
以上url是一般处理程序的路径,type是传值方式,datatype是接受值类型,data是参数
ajax的调用我就不赘述了,这里主要是success里对接受的json类型值的处理,上述方法是对于 {"name":"Liza", "password":"123"} json对象进行处理,方法中的k是键,data[k]是值。 $("input[id$=fld_" + k + "]").val(data[k]); 这里的 k 就是在一般处理程序中自定义的类里面的字段,而 data[k] 就是方法里对它赋的值,在前面已经说过类里的字段是使用的前台控件id后缀 加上与 “fld_” id前缀拼接就组成了完整的id,自己就可以进行赋值了。
另一种是 [{"name":"Liza", "password":"123"}, {"name":"Mike", "password":"456"}] json数组的处理
for(var i in packJson){//遍历packJson 数组时,i为索引 alert(packJson[i].name + " " + packJson[i].password); }
这种的由于没有尝试过,暂时先记下来,以后肯定有用得到的地方。
这次的总结记录就这么多。