快速上手wap网站开发.doc
快速上手wap网站开发近来工作比拟紧张,一直想写一些东西,无奈没有时间,现在开发的市移动wap论坛终于告一段落,现在将开发过程简单记录一下,以备日后参考,都是一些简单的使用过程,可为初次接触wap开发的提供一点点参考,高手可以忽略。一。配置环境: vs2021中已经没有了新建wap的选项,所需的wap模板需要从网上下载: 下载地址:,这是我的网络硬盘,下载下来是一个ASPNETMobileTemplates.rar的文件,根据里面的说明将文件拷贝到所需的文件夹。 模拟器可用openware(官方免费注册下载地址),也可用vs自带的设备仿真器要先安装ActiveSync,在工具设备仿真管理器选择pocket pc 2003中的pocket pc 2003 se仿真器右键点解连接,然后再右键点击插入底座,运行后即可使用,不过在仿真管理器中地址不要用local,要用本机ip地址。二。建立数据库: 数据库采用sqlserver,建立一个名为wapDB的数据库,如下列图: 然后添加一个用户表userinfo,如下列图: 为数据库添加一条记录,如下列图: 建立表document,用来存储发布的文章,表构造如下列图: 先为document表添加20条数据,用来显示,如下列图: 至此,数据库建立完毕,下面我们将采用vs2021来具体开发。三。建立工程,开场开发: 首先,我们建立一个testWap的工程,如下列图: 将新建工程默任生成的default.aspx删除,新建一个login.aspx的mobile web form模板在第一步环境配置中按照说明将ASPNETMobileTemplates.rar中的文件拷贝到各个文件夹后,就会在新建工程中最下面的模板中显示mobile模板了,如下列图: 建立好以后,按照上述方法再添加一个index.aspx的文件。 至此,我们所需的文件已经全部建立完成,login.aspx用来登录,登录后到index.aspx页面,此页面用来分页显示document文章表中的内容,并且可以添加文章记录。注意,做好网页后,需要在记事本中将我们刚刚建立的login.aspx、index.aspx翻开重新保存一下,保存编码改为utf-8,覆盖原文件即可,这样做是因为工程采用utf-8编码,如果不这样的话,页面含有中文的话就会显示为乱码。,如下列图: 然后开场编码,具体编码与asp中的编码过程一样,不同的就是换成了mobile控件,这里需要注意的vs下开发wap不支持可视化设计,我们只能在后台手工编码,当添加<mobile>控件的时候,只要打上<m就会出现你所需要的mobile控件,mobile控件的具体有哪些与都有什么属性请参考其他文档,日后假设有时间,我会将mobile控件的使用说明详细介绍一下,这里给大家引荐一个网址,这里面有mobile控件的介绍与使用说明,我们这里只用到了objectlist控件与textbox、textview控件以及command、Label控件,command控件其实就是button按钮,在mobile里叫command。 这里我们建立三个文件: login.aspx:登录页面 index.aspx:分页显示文章页面,带有快速发表 view.aspx:显示文章具体内容页面三个页面源代码:login.aspx 前台代码具体如下:1. <% Page Language="C#" AutoEventWireup="true" Inherits="test" Codebehind="login.aspx.cs" %>2. <% Register TagPrefix="mobile" Namespace="System.Web.UIleControls" Assembly="System.Weble" %>3. <html xmlns="" >4. <body>5. <mobile:Form id="Form1" runat="server"> <!-表单->6. <mobile:Label ID="z1" Runat="server" Font-Size="Large" ForeColor="#3333cc">登录窗口</mobile:Label>7. <!-lbl_out:信息标签,初始隐藏,登录失败后或退出系统时显示信息->8. <mobile:Label ID="lbl_out" Runat="server" ForeColor="Red" Visible="false"></mobile:Label> 9. 用户名:<br />10. <mobile:TextBox ID="tb_User" Runat="server" Size="10" ></mobile:TextBox><!-用户名输入框:tb_User->11. 密码:<br />12. <mobile:TextBox ID="tb_Pwd" Runat="server" Size="10" Password="True"></mobile:TextBox><!-密码输入框:tb_Pwd->13. <mobile:Command ID="Button1" Runat="server" OnClick="Button1_OnClick" >登录</mobile:Command><!-登录按钮->14. </mobile:Form>15. </body>16. </html>login.aspx.cs 后台代码具体如下:1. using System;2. using System.Collections;3. using SystemponentModel;4. using System.Data;5. using System.Drawing;6. using System.Web;7. using System.Weble;8. using System.Web.SessionState;9. using System.Web.UI;10. using System.Web.UIleControls;11. using System.Web.UI.WebControls;12. using System.Web.UI.HtmlControls;13. using System.Data.SqlClient;14. namespace testWap15. public partial class16. protected void Page_Load(object sender, EventArgs e)17. #region 系统退出时将信息标签lbl_out赋值并且显示 18. if (Session"loginOutInfo" != null)19. string outInfo = Session"loginOutInfo".ToString();20. this.lbl_out.Text = outInfo;21. this.lbl_out.Visible = true;22. Session.Clear();23. #endregion 24. / <summary> 25. / 登录验证 26. / </summary> 27. / <param name="sender"></param> 28. / <param name="e"></param> 29. protected void Button1_OnClick(object sender, EventArgs e)30. string username = this.tb_User.Text.Trim();31. string userpwd = this.tb_Pwd.Text.Trim();32. string strCon = "Data Source=(local);Database="33. string strSql = "select * from userinfo where user_name='"+username+"' and user_pwd='"+userpwd+"'"34. SqlConnection conn = new SqlConnection(strCon);35. conn.Open();36. SqlDataAdapter da = new SqlDataAdapter(strSql, conn);37. DataSet ds = new DataSet();38. da.Fill(ds);39. conn.Close();40. int rowCount = ds.Tables0.Rows.Count;41. if (rowCount > 0)42. Session"username" = ds.Tables0.Rows0"user_name".ToString().Trim();43. Response.Redirect("index.aspx");44. else45. this.lbl_out.Text = "用户名密码错误,请重新登录!"46. this.lbl_out.Visible = true;index.aspx 前台代码具体如下:1. <% Page Language="C#" AutoEventWireup="true" Inherits="test" Codebehind="index.aspx.cs" %>2. <% Register TagPrefix="mobile" Namespace="System.Web.UIleControls" Assembly="System.Weble" %>3. <html xmlns="" >4. <body>5. <mobile:Form id="Form1" runat="server"> <!-表单->6. <mobile:Label ID="lbl_uname" Runat="server"></mobile:Label>7. <mobile:Label ID="wt" Runat="server" Font-Size="Large" ForeColor="Red">文章列表</mobile:Label>8. <mobile:ObjectList ID="ObjectList1" Runat="server"><!-ObjectList控件->9. <DeviceSpecific>10. <Choice>11. <ItemTemplate>12. <mobile:Link Runat="server" Text='<%# (ObjectListItem)Container)"doc_title" %>' NavigateUrl='<%# "view.aspxid="+(ObjectListItem)Container)"doc_id"%>' ID="Title" NAME="Title" Wrapping="Wrap">13. </mobile:Link>14. </ItemTemplate>15. </Choice>16. </DeviceSpecific>17. </mobile:ObjectList>18. <br />19. <mobile:Label id="lbl_page" runat="server" Visible="False">1</mobile:Label><!-页码:lbl_page->20. <mobile:Label id="lbl_pagecount" runat="server" Visible="False">1</mobile:Label><!-总页数:lbl_pagecount->21. <mobile:Link ID="lnk_top" Runat="server" BreakAfter="False">首页 | </mobile:Link><mobile:Link id="lnk_pre" runat="server"> 上一页</mobile:Link>22. <mobile:Link id="lnk_end" runat="server" Visible="False" BreakAfter="false">尾页 | </mobile:Link><mobile:Link id="lnk_next" runat="server"> 下一页</mobile:Link>23. <br />24. <mobile:Label id="lbl_fabu" Runat="server">发布文章:</mobile:Label>25. <mobile:Label ID="lbl_error" Runat="server" Visible="false" ForeColor="Red"></mobile:Label>26. <mobile:TextBox ID="tb_title" Runat="server"></mobile:TextBox>27. <mobile:TextBox ID="tb_content" Runat="server"></mobile:TextBox>28. <mobile:Command ID="Button2" Runat="server" OnClick="Button2_OnClick" BreakAfter="false">发表</mobile:Command><mobile:Command ID="Button1" Runat="server" OnClick="Button1_OnClick">退出</mobile:Command>29. </mobile:Form>30. </body>31. </html>index.aspx.cs 后台代码具体如下:1. using System;2. using System.Collections;3. using SystemponentModel;4. using System.Data;5. using System.Drawing;6. using System.Web;7. using System.Weble;8. using System.Web.SessionState;9. using System.Web.UI;10. using System.Web.UIleControls;11. using System.Web.UI.WebControls;12. using System.Web.UI.HtmlControls;13. using System.Data.SqlClient;14. namespace testWap15. public partial class16. protected void Page_Load(object sender, EventArgs e)17. if (Session"username" = null)18. Session"loginOutInfo" = "登录时间到,请重新登录!"19. Response.Redirect("login.aspx");20. this.lbl_uname.Text = "欢送您:"+(string)Session"username"21. if (Session"ok" != null)22. this.lbl_error.Text = "发表成功!"23. this.lbl_error.Visible = true;24. Session"ok" = null;25. if (!IsPostBack)26. Bind();27. private void Bind()28. string rPage = Request.QueryString"Page"29. int page = 1;30. if (rPage != null)31. try32. page = int.Parse(rPage);33. catch34. page = 1;35. Session"page" = page;36. PagedDataSource ps = new PagedDataSource();37. string strCon = "Data Source=(local);Database="38. string strSql = "select * from document order by doc_id desc"39. SqlConnection conn = new SqlConnection(strCon);40. conn.Open();41. SqlDataAdapter da = new SqlDataAdapter(strSql, conn);42. DataSet ds = new DataSet();43. da.Fill(ds);44. conn.Close();45. ps.DataSource = ds.Tables0.DefaultView;46. ps.AllowPaging = true;47. ps.PageSize = 5;48. ps.CurrentPageIndex = page - 1;49. this.lnk_top.Visible = true;50. this.lnk_pre.Visible = true;51. this.lnk_next.Visible = true;52. this.lnk_end.Visible = true;53. this.lnk_top.NavigateUrl = "index.aspxpage=1"54. this.lnk_pre.NavigateUrl = "index.aspxpage=" + (page - 1);55. this.lnk_next.NavigateUrl = "index.aspxpage=" + (page + 1);56. this.lnk_end.NavigateUrl = "index.aspxpage=" + ps.PageCount;57. if (page = 1)58. this.lnk_top.Visible = false;59. this.lnk_pre.Visible = false;60. if (page = ps.PageCount)61. this.lnk_next.Visible = false;62. this.lnk_end.Visible = false;63. if (ps.PageCount = 1)64. this.lnk_top.Visible = false;65. this.lnk_pre.Visible = false;66. this.lnk_next.Visible = false;67. this.lnk_end.Visible = false;68. this.lbl_pagecount.Text = Convert.ToString(ps.PageCount);69. this.ObjectList1.DataSource = ps;70. this.ObjectList1.DataBind();71. protected void Button2_OnClick(object sender, EventArgs e)72. string title = this.tb_title.Text.Trim();73. string content = this.tb_content.Text.Trim();74. if (title = "" | title = null | content = "" | content = null)75. this.lbl_error.Text = "文章标题或内容不能为空!"76. this.lbl_error.Visible = true;77. return;78. string strSql = "insert document values('" + title + "','" + content + "')"79. string strCon = "Data Source=(local);Database="80. SqlConnection conn = new SqlConnection(strCon);81. conn.Open();82. SqlCommand com = new SqlCommand(strSql, conn);83. com.ExecuteNonQuery();84. conn.Close();85. Session"ok" = "ok"86. Response.Redirect("index.aspx");87. protected void Button1_OnClick(object sender, EventArgs e)88. try89. Session.Clear();90. Session"loginOutInfo" = "退出成功!"91. catch92. Session"loginOutInfo" = "退出成功!"93. Response.Redirect("login.aspx");view.aspx 前台代码具体如下:1. <% Page Language="C#" AutoEventWireup="true" Inherits="test" Codebehind="view.aspx.cs" %>2. <% Register TagPrefix="mobile" Namespace="System.Web.UIleControls" Assembly="System.Weble" %>3. <html xmlns="" >4. <body>5. <mobile:Form id="Form1" runat="server">6. <mobile:Label ID="Label1" Runat="server" ForeColor="#0000cc" >帖子内容</mobile:Label>7. <mobile:Label ID="z1" Runat="server" ForeColor="#0066ff"> 标题:</mobile:Label>8. <mobile:TextView ID="tv_title" Runat="server" Wrapping="Wrap"></mobile:TextView>9. <mobile:Label ID="z2" Runat="server" ForeColor="#0066ff"> 内容:</mobile:Label>10. <mobile:TextView ID="tv_Content" Runat="server" Wrapping="Wrap"></mobile:TextView>11. <mobile:Link ID="lnk_FanHui" Runat="server" BreakAfter="false">返回上层</mobile:Link> | 12. <mobile:Command ID="Command1" Runat="server" OnClick="Button1_OnClick">退出</mobile:Command>13. </mobile:Form>14. </body>15. </html>view.aspx.cs 后台代码具体如下:1. using System;2. using System.Collections;3. using SystemponentModel;4. using System.Data;5. using System.Drawing;6. using System.Web;7. using System.Weble;8. using System.Web.SessionState;9. using System.Web.UI;10. using System.Web.UIleControls;11. using System.Web.UI.WebControls;12. using System.Web.UI.HtmlControls;13. using System.Data.SqlClient;14. namespace testWap15. public partial class16. protected void Page_Load(object sender, EventArgs e)17. if (Session"username" = null | Session"page" = null)18. Session"loginOutInfo" = "登录时间到,请重新登录!"19. Response.Redirect("login.aspx");20. int docid = int.Parse(Request"id".ToString();21. string strCon = "Data Source=(local);Database="22. string strSql = "select * from document where doc_id=" + docid;23. SqlConnection conn = new SqlConnection(strCon);24. conn.Open();25. SqlDataAdapter da = new SqlDataAdapter(strSql, conn);26. DataSet ds = new DataSet();27. da.Fill(ds);28. conn.Close();29. this_title.Text = ds.Tables0.Rows0"doc_title".ToString();30. this_Content.Text = ds.Tables0.Rows0"doc_content".ToString();31. int page = (int)Session"page"32. this.lnk_FanHui.NavigateUrl = "index.aspxpage="+Convert.ToString(page);33. protected void Button1_OnClick(object sender, EventArgs e)34. try35. Session.Clear();36. Session"loginOutInfo" = "退出成功!"37. catch38. Session"loginOutInfo" = "退出成功!"39. Response.Redirect("login.aspx");以上程序完毕,这是个简单的发表分页的wap工程,比拟简单,仅供参考,内容还有很多不完善之处,比方登录的验证需要完善,数据库连接可以放到config中,这里只是为了简单而写成这样的。在wap开发中的一点心得: 需将文件另保存为utf-8格式。 wap控件每个默认后面自动分行,假设想不分行需将控件的BreakAfter属性置为False。 wap控件中的内容自动分行:Wrapping="Wrap"第 17 页