标签:
前段时间使用Ext.Net实现在CodeBehind中动态生成表单项到FormPanel中,并实现表单项的保存,在做的过程中发现几点问题:
①、在后台给Button添加DirectClick事件时,虽然能添加成功,但是点击按钮执行时就会报500的错误。
于是改为在前台JS中去获取数据,然后使用DirectMethod.request方法去调用一般处理程序去实现数据的保存,代码如下:
1 function save(strIDControl) { 2 var data = eval(strIDControl); 3 if (data.length > 0) { 4 var saveFlag = true; 5 var retValue = new Array(); 6 for (i = 0; i < data.length; i++) { 7 var control = Ext.getCmp(data[i].ControlID); 8 var value = control.getValue(); 9 var parentControl = control.ownerCt; 10 if (control.allowBlank == false && (value == null || value == "")) { 11 control.focus(); 12 parentControl.focus(); 13 saveFlag = false; 14 return; 15 } 16 var obj = new Object(); 17 obj.ID = data[i].ID; 18 obj.Value = value; 19 retValue[i] = obj; 20 } 21 if (saveFlag == true) { 22 Ext.net.DirectMethod.request({ 23 url: "SaveService.ashx", 24 method:"post", 25 clearRequest: true, 26 params: { 27 submit:retValue 28 }, 29 success: function (result) { 30 alert(result); 31 } 32 }); 33 } 34 }
②、JS中通过Params把参数传递到一般处理程序中,通过context.Request.Params["submit"]发现获取不到传递的数据
后来查看context中的数据,发现我们传递的数据在Request.Params["submitDirectEventConfig]中,格式为JSON字符串,如图所示:
③、如何从上面的JSON字符串里面获取我们需要的数据,具体代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using Ext.Net; namespace TestFunctions { /// <summary> /// SaveService 的摘要说明 /// </summary> public class SaveService : IHttpHandler { public struct Params { public int ID { get; set; } public string Value { get; set; } } public struct ExtraParamsConfig { public object Submit { get; set; } } public struct Config { public string __EVENTTARGET { get; set; } public string __EVENTARGUMENT { get; set; } public object extraParams { get; set; } } public struct DirectEventConfig { public Config Config { get; set; } } public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string directEventConfig = context.Request.Params["submitDirectEventConfig"]; DirectEventConfig EventConfig= JSON.Deserialize<DirectEventConfig>(directEventConfig); object obj = EventConfig.Config.extraParams; string str = obj.ToString(); ExtraParamsConfig extra = JSON.Deserialize<ExtraParamsConfig>(str); object submit = extra.Submit; List<Params> list = JSON.Deserialize<List<Params>>(submit.ToString()); context.Response.Write(JSON.Serialize("hello the world")); } public bool IsReusable { get { return false; } } } }
这里是通过多次反序列化实现的,最终list里面得到的就是我们需要的数据。
Ext.Net使用DirectMethod.request调用一般处理程序(.ashx)并传递参数
标签:
原文地址:http://www.cnblogs.com/hongyan5682/p/4580428.html