zoukankan      html  css  js  c++  java
  • Ext.Net使用DirectMethod.request调用一般处理程序(.ashx)并传递参数

    前段时间使用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     }
    View Code

     ②、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里面得到的就是我们需要的数据。

  • 相关阅读:
    Java中File类的使用
    Java集合中Comparator和Comparable接口的使用
    ODP.NET
    DllImport
    .net 项目与网站区别
    sqlserver 2012 分页
    sqlserver 分页
    ORACLE 中ROWNUM
    mysql 分页优化
    mysql windows 安装
  • 原文地址:https://www.cnblogs.com/hongyan5682/p/4580428.html
Copyright © 2011-2022 走看看