Wojilu学习笔记 (01)

“我记下”开发框架(wojilu framework) 是 .net
平台下之概括开发框架
,首要用于 web 方面的迅猛开。

演示1.演示异步获取一个网址的情,处理后呈现在OutPut这同样Label上

合法网址:http://www.wojilu.com
源码托管网址: https://github.com/wojilu/wojilu
授权协议:Apache
License
然免费用于商业环境

 1图片 1using System;
 2图片 2using System.Web;
 3图片 3using System.Web.UI;
 4图片 4using System.Web.UI.WebControls;
 5图片 5using System.Net;
 6图片 6using System.IO;
 7图片 7using System.Text;
 8图片 8using System.Text.RegularExpressions;
 9图片 9
10图片 10public partial class AsyncPage : System.Web.UI.Page
11图片 11图片 12图片 13{
12图片 14    private WebRequest _request;
13图片 15
14图片 16    void Page_Load (object sender, EventArgs e)
15图片 17图片 18    图片 19{
16图片 20        AddOnPreRenderCompleteAsync (
17图片 21            new BeginEventHandler(BeginAsyncOperation),
18图片 22            new EndEventHandler (EndAsyncOperation)
19图片 23        );
20图片 24    }
21图片 25
22图片 26    IAsyncResult BeginAsyncOperation (object sender, EventArgs e, 
23图片 27        AsyncCallback cb, object state)
24图片 28图片 29    图片 30{
25图片 31        _request = WebRequest.Create(“http://msdn.microsoft.com“);
26图片 32        return _request.BeginGetResponse (cb, state);
27图片 33    }
28图片 34    void EndAsyncOperation (IAsyncResult ar)
29图片 35图片 36    图片 37{
30图片 38        string text;
31图片 39        using (WebResponse response = _request.EndGetResponse(ar))
32图片 40图片 41        图片 42{
33图片 43            using (StreamReader reader = 
34图片 44                new StreamReader(response.GetResponseStream()))
35图片 45图片 46            图片 47{
36图片 48                text = reader.ReadToEnd();
37图片 49            }
38图片 50        }
39图片 51
40图片 52        Regex regex = new Regex (“href\\s*=\\s*\”([^\”]*)\””, 
41图片 53            RegexOptions.IgnoreCase);
42图片 54        MatchCollection matches = regex.Matches(text);
43图片 55
44图片 56        StringBuilder builder = new StringBuilder(1024);
45图片 57        foreach (Match match in matches)
46图片 58图片 59        图片 60{
47图片 61            builder.Append (match.Groups[1]);
48图片 62            builder.Append(“<br/>”);
49图片 63        }
50图片 64
51图片 65        Output.Text = builder.ToString ();
52图片 66    }
53图片 67}
54图片 68
55图片 69

 

以身作则2:演示怎样异步从数据库查询数据,并以回到的Data里德(Reade)r绑定到指定控件上

路由配置

 

~/{controller}/{id};requirements:{id=int}

默认Controller的Show(int id)方法,此处id直接传入

public void Show(int id)
        {


        }

 

图片 70using System;
图片 71using System.Data;
图片 72using System.Data.SqlClient;
图片 73using System.Web;
图片 74using System.Web.UI;
图片 75using System.Web.UI.WebControls;
图片 76using System.Web.Configuration;
图片 77
图片 78public partial class AsyncDataBind : System.Web.UI.Page
图片 79图片 80图片 81{
图片 82    private SqlConnection _connection;
图片 83    private SqlCommand _command;
图片 84    private SqlDataReader _reader;
图片 85
图片 86
图片 87    protected void Page_Load(object sender, EventArgs e)
图片 88图片 89    图片 90{
图片 91        if (!IsPostBack)
图片 92图片 93        图片 94{
图片 95            // Hook PreRenderComplete event for data binding
图片 96            this.PreRenderComplete += 
图片 97                new EventHandler(Page_PreRenderComplete);
图片 98
图片 99            // Register async methods
图片 100            AddOnPreRenderCompleteAsync(
图片 101                new BeginEventHandler(BeginAsyncOperation),
图片 102                new EndEventHandler(EndAsyncOperation)
图片 103            );
图片 104        }
图片 105    }
图片 106    IAsyncResult BeginAsyncOperation (object sender, EventArgs e, 
图片 107        AsyncCallback cb, object state)
图片 108图片 109    图片 110{
图片 111        string connect = WebConfigurationManager.ConnectionStrings
图片 112            [“PubsConnectionString”].ConnectionString;
图片 113        _connection = new SqlConnection(connect);
图片 114        _connection.Open();
图片 115        _command = new SqlCommand(
图片 116            “SELECT title_id, title, price FROM titles”, _connection);
图片 117        return _command.BeginExecuteReader (cb, state);
图片 118    }
图片 119
图片 120    void EndAsyncOperation(IAsyncResult ar)
图片 121图片 122    图片 123{
图片 124        _reader = _command.EndExecuteReader(ar);
图片 125    }
图片 126
图片 127    protected void Page_PreRenderComplete(object sender, EventArgs e)
图片 128图片 129    图片 130{
图片 131        Output.DataSource = _reader;
图片 132        Output.DataBind();
图片 133    }
图片 134
图片 135    public override void Dispose()
图片 136图片 137    图片 138{
图片 139        if (_connection != null) _connection.Close();
图片 140        base.Dispose();
图片 141    }
图片 142}
图片 143
图片 144

数据分页组件

 

public void Show(int id)
      {
          set("siteleft", qjw.Web.siteleft());

          using (MAction action = new MAction(TableNames.zt_article))
          {
              int page = ctx.route.page;
              int rowcount = 0;
              int pagesize = 10;
              MDataTable table = action.Select(page, pagesize, "IsDel=0 and classid="+ id +" order by posttime desc", out rowcount);
              //MDataTable table = action.Select("IsDel=0 order by posttime desc");

              IBlock block = getBlock("Article");
              foreach (MDataRow row in table.Rows)
              {
                  block.Set("article.id", row["id"]);
                  block.Set("article.title", row["title"]);
                  block.Next();
              }

              //生成分页条
              int recordCount = rowcount;
              int pageSize = pagesize;
              int currentPage = ctx.route.page;
              wojilu.PageHelper op = new wojilu.PageHelper(recordCount, pageSize, currentPage);
              set("page", op.PageBar);

          }

      }

 

CyqData数据

 

单条记录操作

using (MAction action = new MAction(TableNames.zt_class))
            {
                if (action.Fill(id))
                {
                    set("ztclass.id", action.Get<string>(zt_class.ID));
                    set("ztclass.classname", action.Get<string>(zt_class.ClassName));
                    set("ztclass.content", action.Get<string>(zt_class.Content));
                }
            }

多漫长记下操作

using (MAction action = new MAction(TableNames.zt_class))
            {
                MDataTable table = action.Select("IsDel=0 and FatherId=0 and IsNav=1 and SystemId=1 and id>1 order by orderflag asc ");

                IBlock cblock = getBlock("Nav");

                foreach (MDataRow row in table.Rows)
                {
                    cblock.Set("ztclass.id", row["id"]);
                    cblock.Set("ztclass.classname", row["classname"]);
                    cblock.Set("ztclass.url", row["url"]);
                    cblock.Next();
                }
            }

 

演示3:异步调用WebService

using

变量使用后尽管会晤自由,变量名好再一次

图片 145using System;
图片 146using System.Data;
图片 147using System.Configuration;
图片 148using System.Web;
图片 149using System.Web.UI;
图片 150using System.Web.UI.WebControls;
图片 151
图片 152public partial class AsyncWSInvoke1 : System.Web.UI.Page
图片 153图片 154图片 155{
图片 156    private WS.PubsWebService _ws;
图片 157    private DataSet _ds;
图片 158
图片 159    protected void Page_Load(object sender, EventArgs e)
图片 160图片 161    图片 162{
图片 163        if (!IsPostBack)
图片 164图片 165        图片 166{
图片 167            // Hook PreRenderComplete event for data binding
图片 168            this.PreRenderComplete += 
图片 169                new EventHandler(Page_PreRenderComplete);
图片 170
图片 171            // Register async methods
图片 172            AddOnPreRenderCompleteAsync(
图片 173                new BeginEventHandler(BeginAsyncOperation),
图片 174                new EndEventHandler(EndAsyncOperation)
图片 175            );
图片 176        }
图片 177    }
图片 178
图片 179    IAsyncResult BeginAsyncOperation (object sender, EventArgs e, 
图片 180        AsyncCallback cb, object state)
图片 181图片 182    图片 183{
图片 184        _ws = new WS.PubsWebService();
图片 185        // Fix up URL for call to local VWD-hosted Web service
图片 186        _ws.Url = new Uri(Request.Url, “Pubs.asmx”).ToString();
图片 187        _ws.UseDefaultCredentials = true;
图片 188        return _ws.BeginGetTitles (cb, state);
图片 189    }
图片 190
图片 191    void EndAsyncOperation(IAsyncResult ar)
图片 192图片 193    图片 194{
图片 195        _ds = _ws.EndGetTitles(ar);
图片 196    }
图片 197
图片 198    protected void Page_PreRenderComplete(object sender, EventArgs e)
图片 199图片 200    图片 201{
图片 202        Output.DataSource = _ds;
图片 203        Output.DataBind();
图片 204    }
图片 205
图片 206    public override void Dispose()
图片 207图片 208    图片 209{
图片 210        if (_ws != null) _ws.Dispose();
图片 211        base.Dispose();
图片 212    }
图片 213}
图片 214
图片 215

示例4:还是异步调用Web瑟维斯,但换了一样种办法

图片 216using System;
图片 217using System.Data;
图片 218using System.Configuration;
图片 219using System.Web;
图片 220using System.Web.UI;
图片 221using System.Web.UI.WebControls;
图片 222
图片 223public partial class AsyncWSInvoke2 : System.Web.UI.Page
图片 224图片 225图片 226{
图片 227    private WS.PubsWebService _ws;
图片 228    private DataSet _ds;
图片 229
图片 230    protected void Page_Load(object sender, EventArgs e)
图片 231图片 232    图片 233{
图片 234        if (!IsPostBack)
图片 235图片 236        图片 237{
图片 238            // Hook PreRenderComplete event for data binding
图片 239            this.PreRenderComplete += 
图片 240                new EventHandler(Page_PreRenderComplete);
图片 241
图片 242            // Call the Web service asynchronously
图片 243            _ws = new WS.PubsWebService();
图片 244            _ws.GetTitlesCompleted += new 
图片 245                WS.GetTitlesCompletedEventHandler(GetTitlesCompleted);
图片 246            _ws.Url = new Uri(Request.Url, “Pubs.asmx”).ToString();
图片 247            _ws.UseDefaultCredentials = true;
图片 248            _ws.GetTitlesAsync();
图片 249        }
图片 250    }
图片 251
图片 252    void GetTitlesCompleted(Object source, 
图片 253        WS.GetTitlesCompletedEventArgs e)
图片 254图片 255    图片 256{
图片 257        _ds = e.Result;
图片 258    }
图片 259
图片 260    protected void Page_PreRenderComplete(object sender, EventArgs e)
图片 261图片 262    图片 263{
图片 264        Output.DataSource = _ds;
图片 265        Output.DataBind();
图片 266    }
图片 267
图片 268    public override void Dispose()
图片 269图片 270    图片 271{
图片 272        if (_ws != null) _ws.Dispose();
图片 273        base.Dispose();
图片 274    }
图片 275}
图片 276
图片 277

示范5:跟示例1差不多,可是加了提姆eOut处理

图片 278using System;
图片 279using System.Web;
图片 280using System.Web.UI;
图片 281using System.Web.UI.WebControls;
图片 282using System.Net;
图片 283using System.IO;
图片 284using System.Text;
图片 285using System.Text.RegularExpressions;
图片 286
图片 287public partial class AsyncPageTask : System.Web.UI.Page
图片 288图片 289图片 290{
图片 291    private WebRequest _request;
图片 292
图片 293    protected void Page_Load(object sender, EventArgs e)
图片 294图片 295    图片 296{
图片 297        PageAsyncTask task = new PageAsyncTask(
图片 298            new BeginEventHandler(BeginAsyncOperation),
图片 299            new EndEventHandler(EndAsyncOperation),
图片 300            new EndEventHandler(TimeoutAsyncOperation),
图片 301            null
图片 302        );
图片 303        RegisterAsyncTask(task);
图片 304    }
图片 305
图片 306    IAsyncResult BeginAsyncOperation(object sender, EventArgs e, 
图片 307        AsyncCallback cb, object state)
图片 308图片 309    图片 310{
图片 311        _request = WebRequest.Create(“http://msdn.microsoft.com“);
图片 312        return _request.BeginGetResponse(cb, state);
图片 313    }
图片 314
图片 315    void EndAsyncOperation(IAsyncResult ar)
图片 316图片 317    图片 318{
图片 319        string text;
图片 320        using (WebResponse response = _request.EndGetResponse(ar))
图片 321图片 322        图片 323{
图片 324            using (StreamReader reader = 
图片 325                new StreamReader(response.GetResponseStream()))
图片 326图片 327            图片 328{
图片 329                text = reader.ReadToEnd();
图片 330            }
图片 331        }
图片 332
图片 333        Regex regex = new Regex(“href\\s*=\\s*\”([^\”]*)\””, 
图片 334            RegexOptions.IgnoreCase);
图片 335        MatchCollection matches = regex.Matches(text);
图片 336
图片 337        StringBuilder builder = new StringBuilder(1024);
图片 338        foreach (Match match in matches)
图片 339图片 340        图片 341{
图片 342            builder.Append(match.Groups[1]);
图片 343            builder.Append(“<br/>”);
图片 344        }
图片 345
图片 346        Output.Text = builder.ToString();
图片 347    }
图片 348
图片 349    void TimeoutAsyncOperation(IAsyncResult ar)
图片 350图片 351    图片 352{
图片 353        Output.Text = “Data temporarily unavailable”;
图片 354    }
图片 355}
图片 356
图片 357