zoukankan      html  css  js  c++  java
  • 打通前后台

    一段时间全在用dojo做开发。没有用到服务端控件。怎么把前台的数据提交到后台。submit. no,刷新很糟。那就ajax吧。每个页面写一堆类似于ashx的请求链接,no,太麻烦。一个ashx搞定。包括了单据提交。切换到纯js提交,也是一样的。中间用到了csla.net

    public class uieditserver : IHttpHandler
    {
    public static List<string> businessnames = new List<string>();
    static uieditserver()
    {
    string businessnameconfig = (ConfigurationManager.AppSettings["businessnames"] ?? "").Trim();
    string[] businessnameconfigs = businessnameconfig.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
    foreach (var item in businessnameconfigs)
    {
    businessnames.Add(item);
    }
    }

    private static Type createExeType(string cmdobj)
    {
    Type createtype = null;
    foreach (var createtypename in businessnames)
    {
    createtype = Type.GetType(string.Format(createtypename, cmdobj));
    if (createtype != null)
    {
    break;
    }
    }


    if (createtype == null)
    {
    throw new Exception("此命令对象不存在");
    }

    return createtype;
    }

    public void ProcessRequest(HttpContext context)
    {
    string operation = context.Request["operation"] ?? "";
    bool isview = (context.Request["view"] ?? "").Trim().Length > 0;
    string outtxt = "";
    try
    {
    checkuserrole(context);
    string[] cmds = operation.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
    //Type createtype = Type.GetType("YHWebCore.Business." + cmds[0] + ", YHWebCore");
    Type createtype = createExeType(cmds[0]);

    //if (createtype == null)
    //{
    // throw new Exception("此命令对象不存在");
    //}

    object coditionobject = null;
    string inputStream = new StreamReader(context.Request.InputStream).ReadToEnd();
    if (cmds.Length == 2 || (cmds.Length > 2 && cmds[0] == cmds[2]))//条件对象一样的时候
    {
    coditionobject = Csla.Reflection.MethodCaller.CallFactoryMethod(createtype, "New");
    //coditionobject = Csla.Reflection.MethodCaller.CreateInstance(createtype);
    }

    if (cmds.Length > 2 && cmds[0] != cmds[2])
    {
    //Type coditiontype = Type.GetType("yzjxc.Business." + cmds[2] + ", yzjxcV1.Business");
    Type coditiontype = createExeType(cmds[2]);

    if (createtype == null)
    {
    throw new Exception("此命令对象不存在");
    }

    coditionobject = Csla.Reflection.MethodCaller.CallFactoryMethod(createtype, "New");
    //coditionobject = Csla.Reflection.MethodCaller.CreateInstance(coditiontype);
    //coditionobject = JsonConvert.DeserializeObject(inputStream, coditiontype);
    }

    object fs = null;
    if (cmds[1] == "Builder")//
    {
    fs = Csla.Reflection.MethodCaller.CreateInstance(createtype);
    }
    else if (cmds[1] == "CreateObject")
    {
    fs = coditionobject;
    }
    else if (cmds[1] == "FindPage"
    || cmds[1] == "FindPage2")//分页
    {
    NameValueCollection condtions = new NameValueCollection();
    condtions.Add(context.Request.Form);
    condtions.Add(context.Request.QueryString);
    condtions.Add(context.Request.Headers);
    fs = Csla.Reflection.MethodCaller.CallFactoryMethod(createtype, cmds[1], new object[] { condtions });
    var allcount = Csla.Reflection.MethodCaller.CallPropertyGetter(fs, "TotalRowCount");
    var allcount2 = Csla.Reflection.MethodCaller.CallPropertyGetter(fs, "Count");
    //分页处理
    int skip = 0;
    int take = 0;
    string orderbyasc = "";
    string orderbydesc = "";

    WH.Business.Utilities.DojoPageUtility.pageorderpasers(condtions, out take, out skip,
    out orderbyasc, out orderbydesc);
    if ((int)allcount2 > (long)allcount)
    {
    allcount = allcount2;
    }

    if ((int)allcount2 > 0)
    {
    allcount2 = (int)allcount2 - 1;
    }
    context.Response.Headers.Add("Content-Range", "items " + skip.ToString() + "-" + allcount2 + "/" + allcount.ToString());
    }
    else if (cmds[1] == "DeleteAll"
    || cmds[1] == "FetchOne"
    || cmds[1] == "FindListByType"
    || cmds[1] == "FetchKeyOne")//删除全部
    {
    NameValueCollection condtions = new NameValueCollection();
    condtions.Add(context.Request.Form);
    condtions.Add(context.Request.QueryString);
    fs = Csla.Reflection.MethodCaller.CallFactoryMethod(createtype, cmds[1], new object[] { condtions });
    }
    else
    {
    string dojojsondata = (context.Request.Params["dojojsondata"] ?? "").Trim();
    if (dojojsondata.Length > 0)
    {

    JObject js = JObject.Parse(dojojsondata);

    var oldobj = fecholdobj(coditionobject.GetType(), js);
    //if (cmds[0] == "user" && cmds[1] == "Save")
    //{
    // if (oldobj != null)
    // {
    // password = ((yzjxc.Business.user)oldobj).user_password;
    // }
    //}
    coditionobject = createnewobj(coditionobject, oldobj, js);

    //if (oldobj != null && !((bool)Csla.Reflection.MethodCaller.CallPropertyGetter(oldobj, "IsNew")))
    //setobj(coditionobject, oldobj);
    //setsameobj(coditionobject);
    //coditionobject = JsonConvert.DeserializeObject(dojojsondata, coditionobject.GetType());
    }
    else
    {
    UIUtility.UIHelper.FormToClass(coditionobject, context.Request.Form);//对象值
    UIUtility.UIHelper.FormToClass(coditionobject, context.Request.QueryString);//对象值
    }
    //FormToClass(coditionobject, context.Request.Form);//对象值
    //FormToClass(coditionobject, context.Request.QueryString);//对象值
    //var sss = JsonConvert.DeserializeObject<WhereQueryParamters>(((carinfos)coditionobject).carno);
    //var ms = wheresql(sss);
    if (cmds[1] == "Save" || cmds[1] == "Confirme")
    {
    string brokenRules = "";
    var isvalid = Csla.Reflection.MethodCaller.CallPropertyGetter(coditionobject, "IsValid");
    if (!((bool)isvalid))
    {
    var getbrokenrules = Csla.Reflection.MethodCaller.CallMethod(coditionobject, "GetBrokenRules") as Csla.Rules.BrokenRulesCollection;
    foreach (var brokenRule in getbrokenrules)
    {
    var lambdaBrokenRule = brokenRule;
    var friendlyName =
    Csla.Core.FieldManager.PropertyInfoManager.GetRegisteredProperties(coditionobject.GetType()).Find(
    c => c.Name == lambdaBrokenRule.Property).FriendlyName;
    brokenRules += string.Format("{0}: {1}{2}", friendlyName, brokenRule, Environment.NewLine);
    }
    throw new Exception(brokenRules);
    }
    }

    if (cmds[1] == "Confirme" || cmds[1] == "Cancel")
    {
    if (Csla.Reflection.MethodCaller.IsMethodImplemented(coditionobject, cmds[1]))
    {
    useriddentity museriddentity = HttpContext.Current.User.Identity as useriddentity;
    if (museriddentity == null)
    {
    throw new Exception("未登录");
    }
    var lateBound = new LateBoundObject(coditionobject);
    fs = lateBound.CallMethod(cmds[1], int.Parse(museriddentity.Name));
    //Csla.Reflection.MethodCaller.CallMethodIfImplemented(coditionobject, "Save");
    }
    else
    {
    throw new Exception("无法执行!");
    //fs = Csla.Reflection.MethodCaller.CallFactoryMethod(coditionobject.GetType(), cmds[1]);
    }
    }
    else
    {
    if (cmds.Length == 2)
    {
    if (Csla.Reflection.MethodCaller.IsMethodImplemented(coditionobject, cmds[1]))
    {
    var lateBound = new LateBoundObject(coditionobject);
    fs = lateBound.CallMethod(cmds[1]);
    }
    else
    {
    fs = Csla.Reflection.MethodCaller.CallFactoryMethod(coditionobject.GetType(), cmds[1]);
    }
    }

    if (cmds.Length > 2)
    {
    if (Csla.Reflection.MethodCaller.IsMethodImplemented(coditionobject, cmds[1]))
    {
    var lateBound = new LateBoundObject(createtype);
    fs = lateBound.CallMethod(cmds[1], coditionobject);
    //Csla.Reflection.MethodCaller.CallMethodIfImplemented(coditionobject, "Save");
    }
    else
    {
    fs = Csla.Reflection.MethodCaller.CallFactoryMethod(createtype, cmds[1], coditionobject);
    }
    }
    }
    }

    string uiview = "";
    if (fs is Csla.Core.IBusinessObject)
    {

    if (isview)
    {
    // uiview = Template.Parse(@"
    //<script type=""text/javascript"">
    //function uiloaddatas(){
    // uiarray = new Object();
    // uiarray[""vaild_date""] = { canwrite: false };
    // uiarray[""branch_id""] = { canwrite: false };
    // uiarray[""phone""] = { canwrite: false };
    // uiarray[""contacts""] = { canwrite: false };
    // uiarray[""memo""] = { canwrite: false };
    // candoarray = new Object();
    // candoarray[""toolbar1.save""] = { enable: false, canexecute: false };
    // candoarray[""toolbar1.confirme""] = { enable: false, canexecute: false };
    // candoarray[""toolbar1.cancel""] = { enable: false, canexecute: false };
    // candoarray[""toolbar2.newitem""] = { enable: false, canexecute: false };
    // candoarray[""toolbar2.deleteitem""] = { enable: false, canexecute: false };
    // detailarray = new Object(); detailarray[""grid""] = { canwrite: false };
    // {% if Model.uopartios.addlag && Model.orderbill.IsNew %}
    // detailarray[""grid""] = { canwrite: true }; candoarray[""toolbar1.save""] = { enable: false, canexecute: false };
    // uiarray[""vaild_date""] = { canwrite: true };
    // uiarray[""branch_id""] = { canwrite: true };
    // uiarray[""phone""] = { canwrite: true };
    // uiarray[""contacts""] = { canwrite: true };
    // uiarray[""memo""] = { canwrite: true };
    // candoarray[""toolbar2.newitem""] = { enable: true, canexecute: true };
    // candoarray[""toolbar2.deleteitem""] = { enable: false, canexecute: false };
    // {% elsif Model.uopartios.modifyflag && Model.orderbill.IsNew == false && Model.orderbill.confirmflag == false %}
    // candoarray[""toolbar1.save""] = { enable: false, canexecute: false };
    // uiarray[""vaild_date""] = { canwrite: true };
    // candoarray[""toolbar2.newitem""] = { enable: true, canexecute: true };
    // candoarray[""toolbar2.deleteitem""] = { enable: true, canexecute: true };
    // {% elsif Model.uopartios.modifyflag && Model.orderbill.IsNew == false && Model.orderbill.confirmflag %}
    // candoarray[""toolbar1.confirme""] = { enable: false, canexecute: false };
    // {% endif %}
    // //alert(""sss"");
    // }
    // uiloaddatas();
    //</script >").Render(Hash.FromAnonymousObject(new
    // {
    // Model = new
    // {
    // orderbill = new
    // {
    // IsNew = (bool)MethodCaller.CallPropertyGetter(coditionobject, "IsNew"),
    // confirmflag = true//(bool)MethodCaller.CallPropertyGetter(coditionobject, "confirmflag"),
    // },
    // currentuser = context.User.Identity as useriddentity,
    // uopartios = new
    // {
    // openflag = true,
    // addlag = true,
    // modifyflag = true,
    // delflag = true,
    // confirmflag = true,
    // exportflag = true,
    // printflag = true
    // }
    // }
    // }));

    var localpath = context.Request.UrlReferrer.LocalPath;//获取url
    if (HttpContext.Current.Cache["allpages"] == null)
    {
    ICriteria<v_sys_menu_privilegeInfo> criteria = CriteriaFactory.Create<v_sys_menu_privilegeInfo>();
    v_sys_menu_privilegeInfoList mpagelist = v_sys_menu_privilegeInfoList.Fetch(criteria);
    if (mpagelist.Count > 0)
    {

    }
    HttpContext.Current.Cache.Insert("allpages", mpagelist, null,
    DateTime.Now.AddMinutes(20), System.Web.Caching.Cache.NoSlidingExpiration);
    }

    v_sys_menu_privilegeInfoList allpagelist = HttpContext.Current.Cache["allpages"] as v_sys_menu_privilegeInfoList;
    var getonepage = allpagelist.FirstOrDefault(q => q.pagename.IndexOf("~" + localpath) > -1);
    if (getonepage != null && (getonepage.pagename ?? "").Trim().Length > 0)
    {
    var uo = CriteriaFactory.Create<bo_view>() as ICriteria<bo_view>;
    int operationid = 0;

    if (int.TryParse(context.User.Identity.Name, out operationid))
    {
    uo = uo.Where(q => q.bokey == cmds[0]
    && q.pagename == "~" + localpath);
    //
    var uopartio = bo_view.Fetch(uo);
    if (uopartio != null)
    {
    //uiview = Template.Parse((uopartio.viewflow ?? "").Trim()).Render(Hash.FromAnonymousObject(new
    //{
    // Model = new
    // {
    // orderbill = new
    // {
    // IsNew = (bool)MethodCaller.CallPropertyGetter(coditionobject, "IsNew"),
    // confirmflag = (bool)MethodCaller.CallPropertyGetter(coditionobject, "confirmflag"),
    // },
    // currentuser = context.User.Identity as useriddentity
    // }
    //}));
    //uiview = Razor.Parse((uopartio.viewcontent ?? "").Trim(), new { billui = fs, currentuser = context.User.Identity as useriddentity });
    }
    }
    }
    //uiview =
    }

    //if (fs is System.Collections.IList)
    //{

    if (Csla.Reflection.MethodCaller.IsMethodImplemented(fs, "ToDics"))
    {
    fs = Csla.Reflection.MethodCaller.CallMethod(fs, "ToDics");
    }
    else
    {
    fs = WH.Business.Utilities.DojoPageUtility.uidics.ToDics(fs);
    }
    //}
    //else
    //{
    // Dictionary<string, object> dic = new Dictionary<string, object>();
    // Csla.Data.DataMapper.Map(fs, dic);
    // fs = dic;
    //}
    }

    var returndata = new
    {
    ErrorNo = 0,
    ErrorInfo = "",
    Data = fs == null ? (object)"" : fs,
    View = uiview
    };
    var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" };
    outtxt = JsonConvert.SerializeObject(returndata, Formatting.Indented, timeConverter);
    }
    catch (Csla.Reflection.CallMethodException ex)
    {
    string errorinfo = "";
    //if (ex.InnerException is ArgumentException)
    //{
    // errorinfo = ModelValidator.ShowUIError(ex.InnerException as ArgumentException);
    //}

    if ((errorinfo ?? "").Trim().Length == 0)
    {
    errorinfo = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
    }

    var ap = new
    {
    ErrorInfo = errorinfo,
    ErrorNo = 1,
    Data = "",
    };

    var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" };
    outtxt = JsonConvert.SerializeObject(ap, Formatting.Indented, timeConverter);

    }
    catch (Exception ex)
    {
    var ap = new
    {
    ErrorInfo = ex.Message,
    ErrorNo = 1,
    Data = "",
    };
    var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" };
    outtxt = JsonConvert.SerializeObject(ap, Formatting.Indented, timeConverter);
    }

    context.Response.Write(outtxt ?? "");
    }

    //private static void createnewobj(object coditionobject,JObject js)
    //{
    // //if (coditionobject != null && !((bool)Csla.Reflection.MethodCaller.CallPropertyGetter(coditionobject, "IsNew")))//非新对象
    // //{
    // //}
    // var createtypes =coditionobject.GetType().GetProperties();// createtype.GetProperties();
    // //fecholdobj(coditionobject, js);

    // foreach (var item in createtypes)
    // {
    // object m = null;

    // if (item.Name == "operater")
    // {

    // //value = Csla.Utilities.CoerceValue(pType, vType, oldValue, value);
    // }
    // else if (item.Name == "operdate")
    // {
    // m = DateTime.Now;
    // }

    // if (m != null)
    // {
    // Csla.Reflection.MethodCaller.CallPropertySetter(coditionobject, item.Name, m);
    // continue;
    // }

    // JToken outvalue = null;
    // if (js.TryGetValue(item.Name, out outvalue))
    // {
    // Type vType = Csla.Utilities.GetPropertyType(item.PropertyType);

    // if (js[item.Name].Type == JTokenType.Array)
    // {
    // var sonobj = Csla.Reflection.MethodCaller.CallPropertyGetter(coditionobject, item.Name);
    // //IList childs = sonobj as IList;
    // //for (int childindex = 0; childindex < childs.Count; childindex++)
    // //{
    // // childs[childindex]
    // // //var
    // //}

    // var sonType = Csla.Utilities.GetChildItemType(vType);
    // var sj = JArray.Parse(js[item.Name].ToString());
    // //var jarray = js[item.Name].ToArray();// JArray.Parse(js[item.Name].ToString());
    // foreach (JObject sonitem in sj)
    // {
    // var sonitemobj = Csla.Reflection.MethodCaller.CallMethod(sonobj, "AddNew");

    // createnewobj(sonitemobj, sonitem);
    // //Csla.Reflection.MethodCaller.CallFactoryMethod(vType, "CreateChild");
    // //Csla.Reflection.MethodCaller.CallMethod(sonobj, "Add", sonitemobj);
    // //Csla.Reflection.MethodCaller.CallMethod(sonobj,"Add",)
    // }

    // //createnewobj(vType, sonobj, js[item.Name].ToArray());
    // //处理子对象
    // }
    // else
    // {

    // m = js[item.Name].ToObject(vType);

    // //object m = js[item.Name].ToObject(vType);
    // //value = Csla.Utilities.CoerceValue(pType, vType, oldValue, value);
    // Csla.Reflection.MethodCaller.CallPropertySetter(coditionobject, item.Name, m);
    // }
    // }
    // }
    //}

    private static object createnewobj(object coditionobject, object tempobj, JObject js)
    {
    object oldobj = null;
    if (tempobj != null && !((bool)Csla.Reflection.MethodCaller.CallPropertyGetter(tempobj, "IsNew")))
    {
    oldobj = tempobj;
    }
    else
    {
    oldobj = coditionobject;
    }

    //if (coditionobject != null && !((bool)Csla.Reflection.MethodCaller.CallPropertyGetter(coditionobject, "IsNew")))//非新对象
    //{
    //}
    var createtypes = coditionobject.GetType().GetProperties();// createtype.GetProperties();
    //fecholdobj(coditionobject, js);

    foreach (var item in createtypes)
    {
    object m = null;

    if (item.Name == "operater")
    {
    useriddentity museriddentity = HttpContext.Current.User.Identity as useriddentity;
    if (museriddentity == null)
    {
    throw new Exception("未登录");
    }
    m = int.Parse(museriddentity.Name);
    //value = Csla.Utilities.CoerceValue(pType, vType, oldValue, value);
    }
    else if (item.Name == "operdate")
    {
    Type vType = Csla.Utilities.GetPropertyType(item.PropertyType);
    if (vType == typeof(DateTime))
    m = DateTime.Now;
    else
    m = new SmartDate(DateTime.Now);
    }

    //if (item.Name == "user_password"
    // && (tempobj != null
    // && !((bool)Csla.Reflection.MethodCaller.CallPropertyGetter(tempobj, "IsNew")))
    // && coditionobject)
    //{

    //}


    if (m != null)
    {
    Csla.Reflection.MethodCaller.CallPropertySetter(oldobj, item.Name, m);
    continue;
    }

    JToken outvalue = null;
    if (js.TryGetValue(item.Name, out outvalue))
    {
    Type vType = Csla.Utilities.GetPropertyType(item.PropertyType);

    if (js[item.Name].Type == JTokenType.Array)
    {
    var sonobj = Csla.Reflection.MethodCaller.CallPropertyGetter(oldobj, item.Name);//数组的问题

    var sonobjlist = sonobj as IList;
    var sonType = Csla.Utilities.GetChildItemType(vType);
    var sj = JArray.Parse(js[item.Name].ToString());
    //var jarray = js[item.Name].ToArray();// JArray.Parse(js[item.Name].ToString());
    bool isobjnew = true;
    foreach (JObject sonitem in sj)
    {
    //当前值是否已有
    foreach (var onesonitemobj in sonobjlist)
    {
    if (onesonitemobj != null
    && ((bool)Csla.Reflection.MethodCaller.CallPropertyGetter(onesonitemobj, "IsNew")))
    {
    continue;
    }

    try
    {
    if (isamekeyobj(onesonitemobj, sonitem))
    {
    createnewobj(onesonitemobj, onesonitemobj, sonitem);
    isobjnew = false;
    break;
    }
    }
    catch (Exception ex)
    {
    var ss = onesonitemobj;
    var yy = sonitem;
    throw ex;
    }
    }

    if (isobjnew)
    {
    var sonitemobj = Csla.Reflection.MethodCaller.CallMethod(sonobjlist, "AddNew");

    createnewobj(sonitemobj, null, sonitem);
    }

    if (!isobjnew)
    {
    isobjnew = true;
    }
    }

    foreach (var onesonitemobj in sonobjlist)
    {
    if (onesonitemobj != null
    && !((bool)Csla.Reflection.MethodCaller.CallPropertyGetter(onesonitemobj, "IsDirty")))
    {
    Csla.Reflection.MethodCaller.CallMethod(onesonitemobj, "MarkDeleted");
    }
    }
    }
    else
    {
    if (item.GetCustomAttributes(typeof(System.ComponentModel.DataObjectFieldAttribute), false).Length > 0)
    {
    continue;
    }
    if (!item.CanWrite)
    {
    continue;
    }
    if (vType == typeof(SmartDate))
    {
    m = new SmartDate((DateTime)js[item.Name].ToObject(typeof(DateTime)));
    }
    else
    {
    m = js[item.Name].ToObject(vType);
    }
    Csla.Reflection.MethodCaller.CallPropertySetter(oldobj, item.Name, m);
    }
    }
    }

    return oldobj;
    }

    private static object fecholditemobj(Type coditiontye, JObject js)
    {
    return "";
    //var keys = coditiontye.GetProperties().Where(q =>
    // q.GetCustomAttributes(typeof(System.ComponentModel.DataObjectFieldAttribute), false).Length > 0);//获取key

    //NameValueCollection condtions = new NameValueCollection();

    //string values = "";
    ////fs = Csla.Reflection.MethodCaller.CallFactoryMethod(createtype, cmds[1], new object[] { condtions });
    //foreach (var item in keys)
    //{
    // JToken outvalue = null;
    // if (js.TryGetValue(item.Name, out outvalue))
    // {
    // Type vType = Csla.Utilities.GetPropertyType(item.PropertyType);
    // var keyvalue = js[item.Name].ToObject(vType);
    // if (keyvalue == null)
    // {
    // return null;
    // }
    // else
    // {
    // values += ("," + keyvalue.ToString());
    // }
    // }
    //}
    }

    private static object fecholdobj(Type coditiontye, JObject js)
    {
    var keys = coditiontye.GetProperties().Where(q =>
    q.GetCustomAttributes(typeof(System.ComponentModel.DataObjectFieldAttribute), false).Length > 0);//获取key

    NameValueCollection condtions = new NameValueCollection();

    string values = "";
    //fs = Csla.Reflection.MethodCaller.CallFactoryMethod(createtype, cmds[1], new object[] { condtions });
    foreach (var item in keys)
    {
    JToken outvalue = null;
    if (js.TryGetValue(item.Name, out outvalue))
    {
    Type vType = Csla.Utilities.GetPropertyType(item.PropertyType);
    var keyvalue = js[item.Name].ToObject(vType);
    if (keyvalue == null)
    {
    return null;
    }
    else
    {
    values += ("," + keyvalue.ToString());
    }
    }
    }

    condtions.Add("key", values.Remove(0, 1));

    return Csla.Reflection.MethodCaller.CallFactoryMethod(coditiontye, "FetchOne", new object[] { condtions });
    }

    //private static bool isamekeyobj(object oldobj, object newobj)
    //{
    // var coditiontype = oldobj.GetType();
    // var keys = coditiontype.GetProperties().Where(q =>
    // q.GetCustomAttributes(typeof(System.ComponentModel.DataObjectFieldAttribute), false).Length > 0);//获取key

    // foreach (var item in keys)
    // {
    // var obj1 = Csla.Reflection.MethodCaller.CallPropertyGetter(oldobj, item.Name);
    // var obj2 = Csla.Reflection.MethodCaller.CallPropertyGetter(newobj, item.Name);
    // if (!obj1.Equals(obj2))
    // return false;
    // }
    // return true;
    //}

    //private static void setobj(object newobj, object oldobj)
    //{
    // var createtypes = newobj.GetType().GetProperties();// createtype.GetProperties();
    // foreach (var item in createtypes)
    // {
    // var obj = Csla.Reflection.MethodCaller.CallPropertyGetter(newobj, item.Name);

    // if (obj is IList)
    // {
    // //正反对比,获取要删除的数据
    // var oldlist = Csla.Reflection.MethodCaller.CallPropertyGetter(oldobj, item.Name) as IList;
    // var newlist = Csla.Reflection.MethodCaller.CallPropertyGetter(newobj, item.Name) as IList;

    // //delete alls
    // bool isdelete = true;
    // foreach (var olditem in oldlist)
    // {
    // foreach (var newitem in newlist)
    // {
    // if (isamekeyobj(olditem, newitem))
    // {
    // isdelete = false;//赋值
    // setobj(newitem, oldobj);
    // break;
    // }

    // if (isdelete)
    // {
    // isdelete = false;
    // Csla.Reflection.MethodCaller.CallMethod(oldobj, "Remove", olditem);
    // }
    // }
    // }

    // foreach (var newitem in newlist)
    // {
    // foreach (var olditem in oldlist)
    // {
    // if (isamekeyobj(olditem, newitem))
    // {
    // continue;
    // }
    // }
    // }
    // }
    // }
    //}

    private static bool isamekeyobj(object oldobj, object newobj)
    {
    var coditiontype = oldobj.GetType();
    var keys = coditiontype.GetProperties().Where(q =>
    q.GetCustomAttributes(typeof(System.ComponentModel.DataObjectFieldAttribute), false).Length > 0);//获取key

    foreach (var item in keys)
    {
    var obj1 = Csla.Reflection.MethodCaller.CallPropertyGetter(oldobj, item.Name);
    var obj2 = Csla.Reflection.MethodCaller.CallPropertyGetter(newobj, item.Name);
    if (!obj1.Equals(obj2))
    return false;
    }
    return true;
    }

    private static bool isamekeyobj(object oldobj, JObject js)
    {

    var coditiontype = oldobj.GetType();
    var keys = coditiontype.GetProperties().Where(q =>
    q.GetCustomAttributes(typeof(System.ComponentModel.DataObjectFieldAttribute), false).Length > 0);//获取key

    foreach (var item in keys)
    {
    var obj1 = Csla.Reflection.MethodCaller.CallPropertyGetter(oldobj, item.Name);
    Type vType = Csla.Utilities.GetPropertyType(item.PropertyType);
    var obj2 = js[item.Name].ToObject(vType);

    //var obj2 = Csla.Reflection.MethodCaller.CallPropertyGetter(newobj, item.Name);
    if (!obj1.Equals(obj2))
    return false;
    }
    return true;
    }

    private static void setobj(object newobj, object oldobj)
    {
    var createtypes = newobj.GetType().GetProperties();// createtype.GetProperties();
    foreach (var item in createtypes)
    {
    var obj = Csla.Reflection.MethodCaller.CallPropertyGetter(newobj, item.Name);

    if (obj is IList)
    {
    //正反对比,获取要删除的数据
    var oldlist = Csla.Reflection.MethodCaller.CallPropertyGetter(oldobj, item.Name) as IList;
    var newlist = Csla.Reflection.MethodCaller.CallPropertyGetter(newobj, item.Name) as IList;

    //delete alls
    bool isdelete = true;
    foreach (var olditem in oldlist)
    {
    foreach (var newitem in newlist)
    {
    if (isamekeyobj(olditem, newitem))
    {
    isdelete = false;//赋值
    setobj(newitem, oldobj);
    break;
    }

    if (isdelete)
    {
    isdelete = false;
    Csla.Reflection.MethodCaller.CallMethod(oldobj, "Remove", olditem);
    }
    }
    }

    foreach (var newitem in newlist)
    {
    foreach (var olditem in oldlist)
    {
    if (isamekeyobj(olditem, newitem))
    {
    continue;
    }
    }
    }
    }
    }
    //var coditiontype = oldobj.GetType();
    //var keys = coditiontype.GetProperties().Where(q =>
    // q.GetCustomAttributes(typeof(System.ComponentModel.DataObjectFieldAttribute), false).Length > 0);//获取key

    //NameValueCollection condtions = new NameValueCollection();

    //string values = "";
    ////fs = Csla.Reflection.MethodCaller.CallFactoryMethod(createtype, cmds[1], new object[] { condtions });
    //foreach (var item in keys)
    //{
    // var obj1 = Csla.Reflection.MethodCaller.CallPropertyGetter(oldobj, item.Name);
    // var obj2 = Csla.Reflection.MethodCaller.CallPropertyGetter(newobj, item.Name);
    // if (!obj1.Equals(obj2))
    // return false;
    // //JToken outvalue = null;
    // //if (js.TryGetValue(item.Name, out outvalue))
    // //{
    // // Type vType = Csla.Utilities.GetPropertyType(item.PropertyType);
    // // var keyvalue = js[item.Name].ToObject(vType);
    // // if (keyvalue == null)
    // // {
    // // return null;
    // // }
    // // else
    // // {
    // // values += ("," + keyvalue.ToString());
    // // }
    // //}
    //}

    //condtions.Add("key", values.Remove(0, 1));

    //return Csla.Reflection.MethodCaller.CallFactoryMethod(coditiontye, "FetchOne", new object[] { condtions });
    //if (oldobj == null)
    //{
    // return;
    //}
    //((Csla.Core.BusinessBase)newobj).ValidationComplete
    //NameValueCollection condtions = new NameValueCollection();
    //condtions.Add("key","");
    // var oldobject = Csla.Reflection.MethodCaller.CallFactoryMethod(createtype, cmds[1], new object[] { condtions });

    // var createtypes =coditionobject.GetType();
    // var getproperties = createtypes.GetProperties();// createtype.GetProperties();
    // foreach (var item in getproperties)
    // {
    // }
    }

    public bool IsReusable
    {
    get
    {
    return false;
    }
    }

    private static void checkuserrole(HttpContext context)
    {
    if (context.User == null)
    {
    throw new Exception("登录已超时");
    }

    //useriddentity museriddentity = context.User.Identity as useriddentity;
    //if (museriddentity.Name == "admin" ||
    // museriddentity.rolename == "系统管理员")
    //{
    // return;
    //}
    //rolepageset mroleinfo = new rolepageset();
    //Criteria<rolepageset> criteria = new Criteria<rolepageset>();

    //var wherecriteria = criteria.Where(q => q.rolename == museriddentity.rolename);
    //var oneroleinfo = mroleinfo.Fetch(wherecriteria);
    //if (oneroleinfo.Count == 0)
    //{
    // throw new Exception("对不起,你没有相应的访问权限");
    //}

    // string method = Request["METHAD"];

    //2. string ClassNamespace = method.Substring(0, method.LastIndexOf("."));// "Bss.Web.Login";

    //3. object objType = CreateObject(Request["DLL"], ClassNamespace);

    //4. Type ht = objType.GetType();

    //5. MethodInfo methodInfo = ht.GetMethod(method.Substring(method.LastIndexOf(".") + 1));

    //6. int length = Request.Form.AllKeys.Length;

    //7. ParameterInfo[] paramsInfo = methodInfo.GetParameters();//得到指定方法的参数列表

    //8.

    //9. object[] obj = new object[length];

    //10. for (int i = 0; i < length; i++)

    //11. {

    //12. Type tType = paramsInfo[i].ParameterType;

    //13. //如果它是值类型,或者String

    //14. if (tType.Equals(typeof(string)) || (!tType.IsInterface && !tType.IsClass))

    //15. {

    //16. //改变参数类型

    //17. obj[i] = Convert.ChangeType(Request.Form[i], tType);

    //18. }

    //19. else if (tType.IsClass)//如果是类,将它的json字符串转换成对象

    //20. {

    //21. obj[i] = Newtonsoft.Json.JsonConvert.DeserializeObject(Request.Form[i], tType);

    //22. }

    //23. }

    //24. //执行方法

    //25. object returnValue = methodInfo.Invoke(objType, obj);


    //var opertation = context.Request["operation"] ?? "";
    //if (opertation.Trim().Length == 0)
    //{
    // throw new Exception("对不起,不支持空操作");
    //}

    //string[] cmds = opertation.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);

    //controlsetinfo mcontrolsetinfo = new controlsetinfo();
    //Criteria<controlsetinfo> controlsetinfocriteria = new Criteria<controlsetinfo>();

    //var wherecontrolsetinfo = controlsetinfocriteria.Where(q => q.rolename == museriddentity.rolename
    // && q.controlobjectkey == cmds[0]
    // && q.controlname == cmds[1]);
    //var onecontrolsetinfo = mcontrolsetinfo.Fetch(wherecontrolsetinfo);
    //if (onecontrolsetinfo.Count == 0)
    //{
    // throw new Exception("对不起,你没有相应的访问权限");
    //}


    //if (("," + oneroleinfo[0].rolecontrol + ",").IndexOf(',' + cmds[1].Trim() + ',') < 0)
    //{
    // throw new Exception("对不起,你没有相应的操作权限");

    //}
    }


    }

    查询条件的解决方案

    onClick:function(){
                var codition = dijit.byId('txtCodtion');
                var grids = dijit.byId('grid');
                var filter ={};
                filter.data = 'contains';
                filter.leftNode={
                    data:'classtitle1'
                };
                filter.rightNode={
                    data:codition.getValue()
                };
     
                var filter1 ={};
                filter1.data = 'equal';
                filter1.leftNode={
                    data:'classtitle'
                };
                filter1.rightNode={
                    data:0
                };
     
                var pfilter ={};
                pfilter.data = 'and1';
                pfilter.leftNode=filter;
                pfilter.rightNode=filter1;
     
                var strdata={};
                strdata.rootTreeNode = pfilter;
                alert(dojo.toJson(strdata));
                grids.setQuery({operation: 'wxsitecms_classList.FindPage',filtercodtion:dojo.toJson(strdata)});}
    namespace WH.Business.Utilities
    {
        public enum wjFilter
        {
            and,
            or,
            not,
            equal,
            less,
            lesseEual,
            larger,
            largerEqual,
            contains,
            startsWith,
            endsWith,
            isEmpty
        }
     
        public class wjTree
        {
            public wjTreeNode rootTreeNode { get; set; }
            private StringBuilder sb = new StringBuilder();
            public string getsb
            {
                get {
                    return sb.ToString();
                }
            }
     
            public void setSb()
            {
                sb.Remove(0, sb.Length);
            }
     
            public void PreOrder(wjTreeNode node) //先序遍历
            {
                if (node != null)
                {
                    sb.Append(node.data.ToString() + " " + node.ToString());
                    //Console.Write(node.ToString()); //打印字符
                    PreOrder(node.leftNode); //递归
                    PreOrder(node.rightNode); //递归
                }
            }
            public void MidOrder(wjTreeNode node) //中序遍历
            {
                if (node != null)
                {
                    MidOrder(node.leftNode); //递归
                    sb.Append(node.data.ToString() + " " + node.ToString());
                   // Console.Write(node.ToString()); //打印字符
                    MidOrder(node.rightNode); //递归
                }
            }
            public void AfterOrder(wjTreeNode node) //后继遍历
            {
                if (node != null)
                {
                    AfterOrder(node.leftNode); //递归
                    AfterOrder(node.rightNode); //递归
                    sb.Append(node.data.ToString() + " " + node.ToString());
                    // Console.Write(node.ToString()); //打印字符
                }
            }
        }
     
        public class wjTreeNode
        {
            public object data { get; set; }
            public wjTreeNode leftNode { get; set;}
            public wjTreeNode rightNode { get; set; }
        }
     
        public class wjGoddess
        {
            public static string createUIByTemplate(string filename, object templateuiobj,
                object templateuicommands, Dictionary<string,string> customerui)
            {
                TemplateDocument document = new TemplateDocument(filename);
                document.Variables.SetValue("templateuis", templateuiobj);
                document.Variables.SetValue("templateuicommands", templateuicommands);
                foreach (var item in customerui)
                {
                    document.Variables.SetValue(item.Key, item.Value);
                }
                return document.GetRenderText();
            }
     
            public static string createUIByCustomerCode(string uicode, string uikeys,
                string methodname, params object[] parameters)
            {
                var helper = new AsmHelper(CSScript.Evaluator.CompileCode(uicode));
                return helper.Invoke(uikeys + "." + methodname, parameters) as string;
            }
     
            public static void SaveChecks(BusinessRules BusinessRules,Type businesstype)
            {
                BusinessRules.CheckRules();
                var getbrokenrules = BusinessRules.GetBrokenRules();
                if (!BusinessRules.IsValid)
                {
                    string brokenRules = "";
                    foreach (var brokenRule in getbrokenrules)
                    {
                        var lambdaBrokenRule = brokenRule;
                        var friendlyName =
                          Csla.Core.FieldManager.PropertyInfoManager.GetRegisteredProperties(businesstype).Find(
                            c => c.Name == lambdaBrokenRule.Property).FriendlyName;
                        brokenRules += string.Format("{0}: {1}{2}", friendlyName, brokenRule, Environment.NewLine);
                    }
                    throw new Exception(brokenRules);
                    //return this;
                }
            }        
     
            public static void createFilter(string filterjson)
            {
                if (!String.IsNullOrWhiteSpace(filterjson))
                {
                    var filterwjTree = JsonConvert.DeserializeObject<wjTree>(filterjson);
                    if (filterwjTree != null)
                    {
                        filterwjTree.MidOrder(filterwjTree.rootTreeNode);
                        string a = filterwjTree.getsb;
     
                        filterwjTree.setSb();
                        filterwjTree.AfterOrder(filterwjTree.rootTreeNode);
                        string b = filterwjTree.getsb;
     
                        filterwjTree.setSb();
                        filterwjTree.PreOrder(filterwjTree.rootTreeNode);
                        string c = filterwjTree.getsb;
                    }
                    //JObject jobj = JObject.Parse(filterjson);
                    //StringBuilder sb = new StringBuilder();
                    //foreach (var item in jobj.Properties())
                    //{
                    //    sb.Append(item.Name);
                    //    if (item.Value.Type == JTokenType.Array)
                    //    {
                    //        foreach (JObject sonitem in (item.Value as JArray))
                    //        {
                    //            foreach (var ssonitem in sonitem.Properties())
                    //            {
                    //                sb.Append("dddd" + ssonitem.Name);
                    //                if (ssonitem.Value.Type == JTokenType.Object)
                    //                {
                    //                    var sssonitem = ssonitem.Value as JObject;
                    //                    foreach (var ssonitem1 in sssonitem.Properties())
                    //                    {
                    //                        sb.Append("fffff" + ssonitem1.Name);
                    //                    }
                    //                }
                    //            }
                    //        }
                    //    }
                    //}
                }
            }
        }
    }
     
    非csla.net的解决方案

    public class uidoserver : IHttpHandler
    {

    public static List<string> businessnames = new List<string>();
    static uidoserver()
    {
    string businessnameconfig = (ConfigurationManager.AppSettings["businessnames"] ?? "").Trim();
    string[] businessnameconfigs = businessnameconfig.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
    foreach (var item in businessnameconfigs)
    {
    businessnames.Add(item);
    }
    }

    public void ProcessRequest(HttpContext context)
    {
    string operation = context.Request["operation"] ?? "";//操作
    bool isencode = (context.Request["encode"] ?? "0") == "1";//是否需要解码
    bool isview = (context.Request["view"] ?? "").Trim().Length > 0;//返回界面
    string outtxt = "";
    try
    {
    string[] cmds = operation.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
    //获取执行类型
    Type createtype = createExeType(cmds[0]);

    //bool istypeexecl = false;
    int paramsnum = 0;
    if (cmds.Length > 2)
    {
    string strparamsnum = cmds[2];
    int.TryParse(strparamsnum, out paramsnum);
    }

    //获取执行方法
    System.Reflection.MethodInfo execlMethod = getExeMethod(cmds[1], createtype, paramsnum);

    //权限判断
    checkuserrole(context);
    //为实例对象或者参数赋值
    object coditionobject = null;
    object objparams = null;
    if (!execlMethod.IsStatic && paramsnum == 0)//实例方法,针对表单之类的bill.save(),fuck.save()之类的
    {
    coditionobject = createExecObj(createtype);//执行对象
    string dojojsondata = isencode ?
    HttpUtility.UrlDecode((context.Request.Params["dojojsondata"] ?? "").Trim())
    : (context.Request.Params["dojojsondata"] ?? "").Trim();
    if (dojojsondata.Length > 0)
    {
    JObject js = JObject.Parse(dojojsondata);

    var oldobj = fecholdobj(coditionobject.GetType(), js);
    coditionobject = createnewobj(coditionobject, oldobj, js);
    }
    else
    {
    FormToClass(coditionobject, context.Request.Form);//对象值
    FormToClass(coditionobject, context.Request.QueryString);//对象值
    }
    }
    else if (paramsnum > 0)//实例方法
    {
    //获取方法参数
    NameValueCollection condtions = new NameValueCollection();
    condtions.Add(context.Request.Form);
    condtions.Add(context.Request.QueryString);
    condtions.Add(context.Request.Headers);
    ParameterInfo[] parameterInfos = execlMethod.GetParameters();
    var isnamevalue = parameterInfos.FirstOrDefault(q => q.ParameterType == typeof(NameValueCollection));
    if (isnamevalue != null)
    {
    objparams = condtions;
    }
    else
    {
    objparams = FormToParams(parameterInfos, condtions);
    }
    }

    object fs = "";
    if (cmds[1] == "Builder")//
    {
    fs = MethodCaller.CreateInstance(createtype);
    }
    else if (cmds[1] == "CreateObject")
    {
    fs = coditionobject;
    }
    else if (Csla.Utilities.GetPropertyType(createtype).GetInterface("IBusinessObject") != null
    &&
    cmds[1] == "FindPage")//分页
    {
    fs = MethodCaller.CallFactoryMethod(createtype, execlMethod.Name, new object[] { objparams });
    var allcount = MethodCaller.CallPropertyGetter(fs, "TotalRowCount");
    var allcount2 = MethodCaller.CallPropertyGetter(fs, "Count");
    //分页处理
    int skip = 0;
    int take = 0;
    string orderbyasc = "";
    string orderbydesc = "";

    WH.Business.Utilities.DojoPageUtility.pageorderpasers(objparams as NameValueCollection, out take, out skip,
    out orderbyasc, out orderbydesc);
    if ((int)allcount2 > (long)allcount)
    {
    allcount = allcount2;
    }

    if ((int)allcount2 > 0)
    {
    allcount2 = (int)allcount2 - 1;
    }
    context.Response.Headers.Add("Content-Range", "items " + skip.ToString() + "-" + allcount2 + "/" + allcount.ToString());
    }
    else if (Csla.Utilities.GetPropertyType(createtype).GetInterface("IBusinessObject") != null
    && (cmds[1] == "Save" || cmds[1] == "Confirme"))
    {
    string brokenRules = "";
    var isvalid = MethodCaller.CallPropertyGetter(coditionobject, "IsValid");
    if (!((bool)isvalid))
    {
    var getbrokenrules = MethodCaller.CallMethod(coditionobject, "GetBrokenRules") as Csla.Rules.BrokenRulesCollection;
    foreach (var brokenRule in getbrokenrules)
    {
    var lambdaBrokenRule = brokenRule;
    var friendlyName =
    Csla.Core.FieldManager.PropertyInfoManager.GetRegisteredProperties(coditionobject.GetType()).Find(
    c => c.Name == lambdaBrokenRule.Property).FriendlyName;
    brokenRules += string.Format("{0}: {1}{2}", friendlyName, brokenRule, Environment.NewLine);
    }
    throw new Exception(brokenRules);
    }
    }
    else
    {
    if (objparams != null)
    {
    if (objparams is NameValueCollection)
    {
    if (execlMethod.IsStatic)
    {
    fs = MethodCaller.CallFactoryMethod(createtype, execlMethod.Name, new object[] { objparams });
    }
    else
    {
    fs = MethodCaller.CallMethod(coditionobject, execlMethod.Name, new object[] { objparams });
    }
    }
    else
    {
    if (execlMethod.IsStatic)
    {
    fs = MethodCaller.CallFactoryMethod(createtype, execlMethod.Name, (objparams as List<object>).ToArray());
    }
    else
    {
    fs = MethodCaller.CallMethod(coditionobject, execlMethod.Name, (objparams as List<object>).ToArray());
    }
    }
    }
    else
    {
    if (execlMethod.IsStatic)
    {
    fs = MethodCaller.CallFactoryMethod(createtype, execlMethod.Name);
    }
    else
    {
    fs = MethodCaller.CallMethod(coditionobject, execlMethod.Name);
    }
    }
    }

    string uiview = "";
    if (isview)
    {
    //string localpath = context.Request.UrlReferrer.LocalPath.Substring(context.Request.UrlReferrer.LocalPath.LastIndexOf('/'));
    //if (HttpContext.Current.Cache["allpages"] == null)
    //{
    // ICriteria<page> criteria = CriteriaFactory.Create<page>();
    // pageList mpagelist = pageList.Fetch(criteria);
    // if (mpagelist.Count > 0)
    // {

    // }
    // HttpContext.Current.Cache.Insert("allpages", mpagelist, null,
    // DateTime.Now.AddMinutes(20), System.Web.Caching.Cache.NoSlidingExpiration);
    //}

    //pageList allpagelist = HttpContext.Current.Cache["allpages"] as pageList;
    //var getonepage = allpagelist.FirstOrDefault(q => q.pageurl.IndexOf(localpath, StringComparison.OrdinalIgnoreCase) > -1);
    //if (getonepage != null && (getonepage.pagecontrol ?? "").Trim().Length > 0)
    //{
    // var uo = CriteriaFactory.Create<user_operation>() as ICriteria<user_operation>;
    // int operationid = 0;

    // if (int.TryParse(context.User.Identity.Name, out operationid))
    // {
    // uo = uo.Where(q => q.user_id == operationid
    // && q.user_name == getonepage.pagename);
    // //
    // var uopartio = user_operation.Fetch(uo);
    // //if (!uopartio.IsNew) uopartio = user_operation.New();
    // //uiview = "sss";
    // //context.Server.Execute(TemplatePath + "?" + context.Request.ServerVariables["Query_String"]);
    // //第一种
    // //context.Server.Execute(TemplatePath + "?" + context.Request.ServerVariables["Query_String"]);
    // //第二种,下面这段生成静态文件的时候有用,如果不生成静态文件就用上面这种
    // //System.IO.TextWriter tw = new System.IO.StringWriter();
    // //context.Server.Execute(TemplatePath + "?" + context.Request.ServerVariables["Query_String"], tw);
    // //context.Response.Write(tw.ToString());
    // uiview = Template.Parse((getonepage.pagecontrol ?? "").Trim()).Render(Hash.FromAnonymousObject(new
    // {
    // Model = new
    // {
    // orderbill = new
    // {
    // IsNew = (bool)MethodCaller.CallPropertyGetter(coditionobject, "IsNew"),
    // confirmflag = (bool)MethodCaller.CallPropertyGetter(coditionobject, "confirmflag"),
    // },
    // currentuser = context.User.Identity as useriddentity,
    // uopartios = new
    // {
    // openflag = uopartio.openflag,
    // addlag = uopartio.addlag,
    // modifyflag = uopartio.modifyflag,
    // delflag = uopartio.delflag,
    // confirmflag = uopartio.confirmflag,
    // exportflag = uopartio.exportflag,
    // printflag = uopartio.printflag
    // }
    // }
    // }));
    // //uiview = Razor.Parse((getonepage.pagecontrol ?? "").Trim(), new { orderbill = fs, currentuser = context.User.Identity as useriddentity, uopartios = uopartio });
    // }
    //}
    //uiview =
    }


    var returndata = new
    {
    ErrorNo = 0,
    ErrorInfo = "",
    Data = fs == null ? (object)"" : fs,
    View = uiview
    };
    var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" };
    outtxt = JsonConvert.SerializeObject(returndata, Formatting.Indented, timeConverter);
    }
    catch (CallMethodException ex)
    {
    string errorinfo = "";
    //if (ex.InnerException is ArgumentException)
    //{
    // errorinfo = ModelValidator.ShowUIError(ex.InnerException as ArgumentException);
    //}

    if ((errorinfo ?? "").Trim().Length == 0)
    {
    errorinfo = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
    }

    var ap = new
    {
    ErrorInfo = errorinfo,
    ErrorNo = 1,
    Data = "",
    };

    var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" };
    outtxt = JsonConvert.SerializeObject(ap, Formatting.Indented, timeConverter);

    }
    catch (Exception ex)
    {
    var ap = new
    {
    ErrorInfo = ex.Message,
    ErrorNo = 1,
    Data = "",
    };
    var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" };
    outtxt = JsonConvert.SerializeObject(ap, Formatting.Indented, timeConverter);
    }

    context.Response.Write(outtxt ?? "");
    }

    private static object createExecObj(Type createtype)
    {
    return MethodCaller.CreateInstance(createtype);
    }

    private const BindingFlags factoryFlags =
    BindingFlags.Static |
    BindingFlags.Public |
    BindingFlags.FlattenHierarchy;

    /// <summary>
    /// 获取执行方法
    /// </summary>
    /// <param name="cmds"></param>
    /// <param name="createtype"></param>
    /// <returns></returns>
    private static System.Reflection.MethodInfo getExeMethod(string cmdname, Type createtype, int paramsnum)
    {
    System.Reflection.MethodInfo execlMethod = MethodCaller.FindMethod(createtype, cmdname, paramsnum);
    if (execlMethod == null)
    {
    System.Reflection.MethodInfo[] methods = createtype.GetMethods(factoryFlags);
    foreach (System.Reflection.MethodInfo oneMethod in methods)
    if (oneMethod.Name == cmdname && oneMethod.GetParameters().Length == paramsnum)
    {
    execlMethod = oneMethod;
    break;
    }
    }

    if (execlMethod == null)
    {
    throw new Exception("此命令不存在");
    }

    return execlMethod;
    }

    /// <summary>
    /// 创建执行主体类型
    /// </summary>
    /// <param name="cmdobj"></param>
    /// <returns></returns>
    private static Type createExeType(string cmdobj)
    {
    Type createtype = null;
    foreach (var createtypename in businessnames)
    {
    createtype = Type.GetType(string.Format(createtypename, cmdobj));
    if (createtype != null)
    {
    break;
    }
    }


    if (createtype == null)
    {
    throw new Exception("此命令对象不存在");
    }

    return createtype;
    }

    private static object createnewobj(object coditionobject, object tempobj, JObject js)
    {
    object oldobj = null;
    if (tempobj != null )
    {
    oldobj = tempobj;
    }
    else
    {
    oldobj = coditionobject;
    }

    var createtypes = coditionobject.GetType().GetProperties();

    foreach (var item in createtypes)
    {
    JToken outvalue = null;
    if (js.TryGetValue(item.Name, out outvalue))
    {
    Type vType = Csla.Utilities.GetPropertyType(item.PropertyType);

    if (js[item.Name].Type == JTokenType.Array)
    {
    var sonobj = MethodCaller.CallPropertyGetter(oldobj, item.Name);//数组的问题

    var sonobjlist = sonobj as IList;
    var sonType = Csla.Utilities.GetChildItemType(vType);
    var sj = JArray.Parse(js[item.Name].ToString());
    //var jarray = js[item.Name].ToArray();// JArray.Parse(js[item.Name].ToString());
    bool isobjnew = true;
    List<object> sameobjs = new List<object>();
    foreach (JObject sonitem in sj)
    {
    //当前值是否已有
    foreach (var onesonitemobj in sonobjlist)
    {
    try
    {
    if (isamekeyobj(onesonitemobj, sonitem))
    {
    createnewobj(onesonitemobj, null, sonitem);
    isobjnew = false;
    sameobjs.Add(onesonitemobj);
    break;
    }
    }
    catch (Exception ex)
    {
    throw ex;
    }
    }

    if (isobjnew)
    {
    var itemtype = Csla.Utilities.GetChildItemType(sonobjlist.GetType());
    var sonitemobj = MethodCaller.CreateInstance(itemtype);
    MethodCaller.CallMethod(sonobjlist, "Add", sonitemobj);
    createnewobj(sonitemobj, null, sonitem);
    sameobjs.Add(sonitemobj);
    }

    if (!isobjnew)
    {
    isobjnew = true;
    }
    }

    List<object> nosameobjs = new List<object>();
    foreach (var onesonitemobj in sonobjlist)
    {
    if (sameobjs.IndexOf(onesonitemobj) == -1)
    {
    nosameobjs.Add(onesonitemobj);
    }
    }
    sameobjs.Clear();
    //移除不要的
    foreach (var removeitem in nosameobjs)
    {
    sonobjlist.Remove(removeitem);
    }
    }
    else
    {
    object m;
    if (!item.CanWrite)
    {
    continue;
    }
    if (vType == typeof(SmartDate))
    {
    m = new SmartDate((DateTime)js[item.Name].ToObject(typeof(DateTime)));
    }
    else
    {
    m = js[item.Name].ToObject(vType);
    }
    MethodCaller.CallPropertySetter(oldobj, item.Name, m);
    }
    }
    }

    return oldobj;
    }

    private static object fecholdobj(Type coditiontye, JObject js)
    {
    var keys = coditiontye.GetProperties().Where(q =>
    q.GetCustomAttributes(typeof(System.ComponentModel.DataObjectFieldAttribute), false).Length > 0);//获取key

    if (keys.Count() == 0) return null;

    NameValueCollection condtions = new NameValueCollection();

    string values = "";
    //fs = MethodCaller.CallFactoryMethod(createtype, cmds[1], new object[] { condtions });
    foreach (var item in keys)
    {
    JToken outvalue = null;
    if (js.TryGetValue(item.Name, out outvalue))
    {
    Type vType = Csla.Utilities.GetPropertyType(item.PropertyType);
    var keyvalue = js[item.Name].ToObject(vType);
    if (keyvalue == null)
    {
    return null;
    }
    else
    {
    values += ("," + keyvalue.ToString());
    }
    }
    }

    condtions.Add("key", values.Remove(0, 1));

    return MethodCaller.CallFactoryMethod(coditiontye, "FetchOne", new object[] { condtions });
    }

    private static bool isamekeyobj(object oldobj, object newobj)
    {
    var coditiontype = oldobj.GetType();
    var keys = coditiontype.GetProperties().Where(q =>
    q.GetCustomAttributes(typeof(System.ComponentModel.DataObjectFieldAttribute), false).Length > 0);//获取key

    foreach (var item in keys)
    {
    var obj1 = MethodCaller.CallPropertyGetter(oldobj, item.Name);
    var obj2 = MethodCaller.CallPropertyGetter(newobj, item.Name);
    if (!obj1.Equals(obj2))
    return false;
    }
    return true;
    }

    private static bool isamekeyobj(object oldobj, JObject js)
    {

    var coditiontype = oldobj.GetType();
    var keys = coditiontype.GetProperties().Where(q =>
    q.GetCustomAttributes(typeof(System.ComponentModel.DataObjectFieldAttribute), false).Length > 0);//获取key

    foreach (var item in keys)
    {
    var obj1 = MethodCaller.CallPropertyGetter(oldobj, item.Name);
    Type vType = Csla.Utilities.GetPropertyType(item.PropertyType);
    var obj2 = js[item.Name].ToObject(vType);

    if (!obj1.Equals(obj2))
    return false;
    }
    return true;
    }

    private static void setobj(object newobj, object oldobj)
    {
    var createtypes = newobj.GetType().GetProperties();// createtype.GetProperties();
    foreach (var item in createtypes)
    {
    var obj = MethodCaller.CallPropertyGetter(newobj, item.Name);

    if (obj is IList)
    {
    //正反对比,获取要删除的数据
    var oldlist = MethodCaller.CallPropertyGetter(oldobj, item.Name) as IList;
    var newlist = MethodCaller.CallPropertyGetter(newobj, item.Name) as IList;

    //delete alls
    bool isdelete = true;
    foreach (var olditem in oldlist)
    {
    foreach (var newitem in newlist)
    {
    if (isamekeyobj(olditem, newitem))
    {
    isdelete = false;//赋值
    setobj(newitem, oldobj);
    break;
    }

    if (isdelete)
    {
    isdelete = false;
    MethodCaller.CallMethod(oldobj, "Remove", olditem);
    }
    }
    }

    foreach (var newitem in newlist)
    {
    foreach (var olditem in oldlist)
    {
    if (isamekeyobj(olditem, newitem))
    {
    continue;
    }
    }
    }
    }
    }
    }

    public bool IsReusable
    {
    get
    {
    return false;
    }
    }

    /// <summary>
    /// 检查权限
    /// </summary>
    /// <param name="context"></param>
    private static void checkuserrole(HttpContext context)
    {
    if (context.User == null)
    {
    throw new Exception("登录已超时");
    }
    }

    public void FormToClass(object nowobj, NameValueCollection collection)
    {
    var properties = nowobj.GetType().GetProperties();
    foreach (var item in properties)
    {
    if (item.CanWrite && collection.AllKeys.Contains(item.Name))
    {
    try
    {
    MethodCaller.CallPropertySetter(nowobj, item.Name,
    Convert.ChangeType(collection[item.Name], item.PropertyType));
    }
    catch (Exception ex)
    {
    throw new ArgumentException(ex.Message, item.Name);
    }
    }
    }
    }

    public List<object> FormToParams(ParameterInfo[] properties, NameValueCollection collection)
    {
    List<object> nowobj = new List<object>();
    //var properties = nowobj.GetType().GetProperties();
    foreach (var item in properties)
    {
    if (collection.AllKeys.Contains(item.Name))
    {
    try
    {
    //MethodCaller.CallPropertySetter(nowobj, item.Name,
    nowobj.Add(Convert.ChangeType(collection[item.Name], item.ParameterType));//);
    }
    catch (Exception ex)
    {
    throw new ArgumentException(ex.Message, item.Name);
    }
    }
    }
    return nowobj;
    }
    }

  • 相关阅读:
    docker-ce版本19.03.8修改docker镜像的存储地址的方法
    Django自带的用户认证模块auth auth.authenticate
    怎么用Python pip怎么升级pip?
    Python import Module加载模块失败 in ImportError: No module named
    系统如何查看某个端口的应用进程pid,关闭进程,解决应用端口占用问题
    琐碎知识点(2)
    琐碎知识点(1)
    微信小程序开发笔记6——小程序添加并使用外部字体(亲测可用)
    Gitlab教程2 —— 多人协同工作(清晰)
    Gitlab教程1 —— 安装和基本使用
  • 原文地址:https://www.cnblogs.com/forhell/p/4815248.html
Copyright © 2011-2022 走看看