像winform一样做web开发
向来不太喜欢asp.net的服务端控件,因为它曾经混乱了我对web开发理解。说实在的我也不会用,自己搞了一个小解决方案:
webservice+soapclient+jquery(easyui)
基本上把BLL层的某些需要暴露出来的方法形成外观层,把外观层发布为webservice,然后再用一个工具生成soapclient代理方法,
比如服务如下:
/// <summary> /// 生成菜单 /// </summary> /// <param name="userId">用户ID</param> /// <returns>html</returns> [WebMethod] public string GetMenu(string userId) { return InitialTree(userId); }
javascript 如下
/// <summary> /// 生成菜单 /// </summary> /// <param name="userId">用户ID</param> /// <returns>html</returns> function GetMenu(userid,callback) { var pl = new SOAPClientParameters(); pl.add('userId', userid); return SOAPClient.invoke('../Service/Approve.asmx', "GetMenu", pl, true,callback); }
从外观层方法暴露一直到js代理生成都可以用自己编写的小工具实现。
了解下soapclient。
http://www.codeproject.com/Articles/12816/JavaScript-SOAP-Client
再加easyui
几个问题:
1、webservice安全问题,通过soapheader等方式来解决。
2、UI偏慢,这个比较麻烦,easyui好像不是很快,也许是用的人水平太低了:(
写个小代码:由xxx.asmx.cs 生成js代理方法
string GetDelegate(string filepath) { string AllTemplate = ""; string AddTemplate = ""; StringBuilder _str = new StringBuilder(); _str.Append("function GetMissionApply(@args,callback)" + Environment.NewLine); _str.Append("{" + Environment.NewLine); _str.Append(" var pl = new SOAPClientParameters();" + Environment.NewLine); _str.Append("@add" + Environment.NewLine); _str.Append(" SOAPClient.invoke(serviceurl, \"GetMissionApply\", pl, true,callback);" + Environment.NewLine); _str.Append("}" + Environment.NewLine); AllTemplate = _str.ToString(); _str = new StringBuilder(); _str.Append(" pl.add(\"applyid\", applyid);" + Environment.NewLine); AddTemplate = _str.ToString(); string returnStr = ""; string methodName = ""; string args = ""; string all = ""; string addStr = ""; string arg = ""; string str = File.ReadAllText(textBox1.Text); string argtemp = ""; foreach (Match m in Regex.Matches(str, @"\[WebMethod\]\s*public\s*(void)?[^\s]*\s*([^\s]*)\s*\(([^\)]*)\)")) { argtemp = ""; methodName = m.Groups[2].ToString().Trim(); args = m.Groups[3].ToString().Trim(); all = AllTemplate.Replace("GetMissionApply", methodName); addStr = ""; foreach (var item in args.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { arg = item.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[1]; addStr += AddTemplate.Replace("applyid", arg); argtemp += arg + ","; } argtemp = argtemp.TrimEnd(',').Trim(); all = all.Replace("@add", addStr).Replace("@args", argtemp); returnStr += all; } return returnStr; }