1015、ASP.Net WebForm 数据绑定 < %# %>   < %= %>   < % %>  < %@ %> Eval("Name")

1、< %#... %>: 是在绑定控件DataBind()方法执行时被执行,用于数据控件绑定

如: < %# Container.DataItem("tit")%> Eval:为单项 Bind:为双向(可更新)绑定

绑定字段:<asp:Lable id="lable1" runat="server" Text='<%#Eval("UserName")%>'/>

绑定函数:<%#getName()%>

绑定变量:aspx:Visible='<%#IsAudit%>' cs:public bool IsAudit= false;

2、< %= %>: 在程序执行时被调用,可以显示后台变量值

绑定变量:aspx: <%=Title%> cs: public string Title ="title";

绑定函数:<%#getName()%>

服务器控件绑定变量:aspx:<asp:Button ID="btn_audit" runat="server" Text="审核" Visible="<%#IsAudit%>" /> cs:public bool IsAudit= false;Page_Load函数添加:Page.DataBind();

3、< % %>: 内联代码块里面可以在页面文件*.aspx或*.ascx文件里面嵌入后台代码

如:<%for(int i=0;i<100;i++){Reaponse.Write(i.ToString());}%>

4、< %@ %>是在*.aspx页面前台代码导入命名空间,

如:<%@Import namespace="System.Data"%>

  1. <!--URL绑定 -->
    <asp:HyperLink ID="HyperLink1" NavigateUrl='<%# Eval("ProjectID","MarketingLogList.aspx?ProjectInfoID={0}") %>' Text='<%# Bind("ProjectName") %>' runat="server"></asp:HyperLink>
  2.  
  3. <asp:HyperLink id="Hyperlink1" runat="server" NAME="Hyperlink1" NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "id", "DeptRoleModify.aspx?id={0:d}") %>'><%=GetTran("", "编辑")%></asp:HyperLink>
  4.  
  5. <asp:HyperLink id="Hyperlink2" runat="server" NAME="Hyperlink1" NavigateUrl='<%# Eval("id","GroupInfoModify.aspx?id={0}") %>' ><%=GetTran("", "编辑")%></asp:HyperLink>
  6.  
  7. <asp:HyperLink ID="HyperLink1" NavigateUrl='<%# "Marketingloglist.aspx?ProjectInfoID="+Eval("ProjectID")+"&ProjectInfoID="+Eval("ProjectID") %>' Text='<%# Bind("ProjectName") %>' runat="server"></asp:HyperLink>
  8.  
  9. <asp:HyperLink id="Hyperlink1" runat="server" NAME="Hyperlink1" NavigateUrl='<%# "GroupInfoModify.aspx?id="+Eval("id")+"&type="+Eval("GroupType") %>' ><%=GetTran("", "编辑")%></asp:HyperLink>
  10.  
  11. OnClientClick=<%#"btn_delete('"+Eval("class_name").ToString()+"',this);return false"%>

1、DropDownList 复制

  1. //DropDownList
  2. DropDownList2.Items.Clear();
  3. foreach (ListItem li in DropDownList1.Items)
  4. {
  5. DropDownList1.Items.Add(li);
  6. }

  

  1. //循环删除判断
  2. for (int i = 0; i < ddldw_xqid.Items.Count; i++)
  3. {
  4. ddldw_xqid.Items[i].Text = ddldw_xqid.Items[i].Text.Replace("教育局", "");
  5. if (ddldw_xqid.Items[i].Text.Equals("潍坊市"))
  6. {
  7. ddldw_xqid.Items[i].Text = "市直";
  8. ddldw_xqid.Items.RemoveAt(i);
  9. ddldw_xqid.Items.Remove(ddldw_xqid.Items[i]);
  10. }
  11. }
  12. if (userds.Tables[0].Rows[0]["dw_lxid"].ToString().Equals("18"))
  13. {
  14. ddldw_lxid.Items.Remove(ddldw_lxid.Items.FindByValue("16"));
  15. ddldw_lxid.Items.Remove(ddldw_lxid.Items.FindByValue("17"));
  16. ddldw_lxid.Items.Remove(ddldw_lxid.Items.FindByText("县区教育局机关"));
  17.  
  18. //ddldw_lxid.Items.Remove(new ListItem("县区教育局机关", "18"));
  19. //ddldw_lxid.Items.Remove(ddldw_lxid.Items.FindByValue("17"));
  20. trxq.Visible = false;
  21. }

  

2、读写AppConfig.config

  1. /// <summary>
  2. /// 设置AppConfig配置文件
  3. /// </summary>
  4. /// <param name="AppKey">键</param>
  5. /// <param name="AppValue">值</param>
  6. public void SetValue(string AppKey, string AppValue)
  7. {
  8. XmlDocument xDoc = new XmlDocument();
  9. //string path = Application.ExecutablePath;
  10. ServerInfo.GetRootPath();
  11. //path = path.Remove(path.IndexOf("bin"));
  12. //xDoc.Load(path + "App.config");
  13. string path = Server.MapPath("~/");
  14. xDoc.Load(path + "AppConfig.config");
  15.  
  16. XmlNode xNode;
  17. XmlElement xElem1;
  18. XmlElement xElem2;
  19. // xNode = xDoc.SelectSingleNode("//configuration");
  20. xNode = xDoc.SelectSingleNode("//appSettings");
  21. xElem1 = (XmlElement)xNode.SelectSingleNode("//add[@key='" + AppKey + "']");
  22. if (xElem1 != null)
  23. {
  24. xElem1.SetAttribute("value", AppValue);
  25. }
  26. else
  27. {
  28. xElem2 = xDoc.CreateElement("add");
  29. xElem2.SetAttribute("key", AppKey);
  30. xElem2.SetAttribute("value", AppValue);
  31. xNode.AppendChild(xElem2);
  32. }
  33. xDoc.Save(path + "AppConfig.config");
  34. }

  

3、webform获取实际地址:

string strFilePath = Server.MapPath("~//ExamRecord.xml");

Response.Write(Server.MapPath("~") + "</br>");

Response.Write(Server.MapPath("~/App_code/WebService.cs") + "</br>");

E:\Net15\ReporterWebServer\ReporterWebServer
E:\Net15\ReporterWebServer\ReporterWebServer\App_code\WebService.cs

4、My97DatePicker 时间控件用法

<asp:TextBox ID="txttraining_starttime" onfocus="WdatePicker()" runat="server" CssClass=" input1"></asp:TextBox>

<asp:TextBox ID="txtexam_starttime" runat="server" CssClass="input1" onfocus="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'});"></asp:TextBox>

WdatePicker({dateFmt:'yyyy'});//只示年

5、asp.net js相互取值

  1. JS中取得Asp.Net的值
  2.  
  3. ()取得服务端控件的值
  4. var s = document.getElementById("TextBox1").value; //取得TextBox1的Text值
  5.  
  6. ()取得全局变量的值
  7.  
  8. Page_Load()方法前定义protected String sT;
  9. Page_Load()方法中赋值sT = "哈哈";
  10.  
  11. JS中这样写取得
  12. var s = "<%=sT %>";
  13.  
  14. --------------------------------------------------------------------------------
  15.  
  16. . Asp.Net中取得JS的值
  17.  
  18. 推荐使用<asp:HiddenField ID="HiddenField1" runat="server" />控件
  19. JS中添加代码
  20. document.getElementById("HiddenField1").value = '风中追风';
  21. 在后台代码中,可以直接使用HiddenField1.Value取得
  22.  
  23. 使用<input type="hidden" id="leslie" runat="server" />
  24. 在后台代码中,可以直接使用leslie.Value取得
  25.  
  26. PS:
  27. 也可以使用<input type="hidden" id="leslie" name="leslie">方法
  28. 在后台操作中用Request.Form.Get("leslie"); //取得的是name="leslie"的值

userds = (DataSet)Session["USERINFO"];
string strrole = "2,5,8,888";
string[] rolearray = strrole.Split(',');
if (rolearray.Contains(userds.Tables[0].Rows[0]["u_sf"].ToString()))
{
Response.Redirect("../Login.aspx", false); return;
}

  1. //FilterSql
  2. /// <summary>
  3. /// 过滤 Sql 语句字符串中的注入脚本
  4. /// </summary>
  5. /// <param name="source">传入的字符串</param>
  6. /// <returns></returns>
  7. public static string FilterSql(string source)
  8. {
  9. //单引号替换成两个单引号
  10. if (source == null)
  11. {
  12. return "";
  13. }
  14. source = source.Replace("'", "''");
  15. //半角封号替换为全角封号,防止多语句执行
  16. source = source.Replace(";", ";");
  17. source = source.Replace("--", "--");
  18. //半角括号替换为全角括号
  19. source = source.Replace("(", "(");
  20. source = source.Replace(")", ")");
  21. ///////////////要用正则表达式替换,防止字母大小写得情况////////////////////
  22. //去除执行存储过程的命令关键字
  23. source = source.Replace("Exec", "");
  24. source = source.Replace("Execute", "");
  25. //去除系统存储过程或扩展存储过程关键字
  26. source = source.Replace("xp_", "x p_");
  27. source = source.Replace("sp_", "s p_");
  28. //防止16进制注入
  29. source = source.Replace("0x", "0 x");
  30. return source;
  31. }
  1. public static void Add(string user_id, string action, string action_result)
  2. {
  3. Exam.Dal.actionlog dallog = new Exam.Dal.actionlog();
  4. Exam.Model.actionlog modellog = new Exam.Model.actionlog();
  5. modellog.user_id = user_id;
  6. modellog.action = action;
  7. modellog.action_result = action_result;
  8. modellog.action_time = DateTime.Now;
  9. //modellog.action_ip = PageHelper.GetIP();
  10. dallog.Add(modellog);
  11. }
  1. 设当前页完整地址是:http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli
  2. "http://"是协议名
  3. "www.jb51.net"是域名
  4. "aaa"是站点名
  5. "bbb.aspx"是页面名(文件名)
  6. "id=5&name=kelli"是参数
  7. 【】获取 完整url (协议名+域名+站点名+文件名+参数)
  8.  
  9. 代码如下:
  10.  
  11. string url=Request.Url.ToString();
  12. url= http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli
  13.  
  14. 【】获取 站点名+页面名+参数:
  15.  
  16. 代码如下:
  17.  
  18. string url=Request.RawUrl;
  19. (或 string url=Request.Url.PathAndQuery;)
  20. url= /aaa/bbb.aspx?id=&name=kelli
  21.  
  22. 【】获取 站点名+页面名:
  23.  
  24. 代码如下:
  25.  
  26. string url=HttpContext.Current.Request.Url.AbsolutePath;
  27. (或 string url= HttpContext.Current.Request.Path;)
  28. url= aaa/bbb.aspx
  29.  
  30. 【】获取 域名:
  31.  
  32. 代码如下:
  33.  
  34. string url=HttpContext.Current.Request.Url.Host;
  35. url= www.jb51.net
  36.  
  37. 【】获取 参数:
  38.  
  39. 代码如下:
  40.  
  41. string url= HttpContext.Current.Request.Url.Query;
  42. url= ?id=&name=kelli
  43.  
  44. 代码如下:
  45.  
  46. Request.RawUrl:获取客户端请求的URL信息(不包括主机和端口)------>/Default2.aspx
  47. Request.ApplicationPath:获取服务器上ASP.NET应用程序的虚拟路径。------>/
  48. Request.CurrentExecutionFilePath:获取当前请求的虚拟路径。------>/Default2.aspx
  49. Request.Path:获取当前请求的虚拟路径。------>/Default2.aspx
  50. Request.PathInfo:取具有URL扩展名的资源的附加路径信息------>
  51. Request.PhysicalPath:获取与请求的URL相对应的物理文件系统路径。------>E:\temp\Default2.aspx
  52. Request.Url.LocalPath:------>/Default2.aspx
  53. Request.Url.AbsoluteUri:------>http://localhost:8080/Default2.aspx
  54. Request.Url.AbsolutePath:---------------------------->/Default2.aspx

密码 !:

  1. 数字字母字符:[-\da-zA-Z`=\\\[\];',./~!@#$%^&*()_+|{}:<>?]*((\d+[a-zA-Z]+[-`=\\\[\];',./~!@#$%^&*()_+|{}:<>?]+)|(\d+[-`=\\\[\];',./~!@#$%^&*()_+|{}:<>?]+[a-zA-Z]+)|([a-zA-Z]+\d+[-`=\\\[\];',./~!@#$%^&*()_+|{}:<>?]+)|([a-zA-Z]+[-`=\\\[\];',./~!@#$%^&*()_+|{}:<>?]+\d+)|([-`=\\\[\];',./~!@#$%^&*()_+|{}:<>?]+\d+[a-zA-Z]+)|([-`=\\\[\];',./~!@#$%^&*()_+|{}:<>?]+[a-zA-Z]+\d+))[-\da-zA-Z`=\\\[\];',./~!@#$%^&*()_+|{}:<>?]*
  2.  
  3. 纯数字:^\d+$
  4. 纯字母:^[a-zA-Z]+$
  5. 纯特殊字符:^[@#$%^&]+$ ps:特殊字符看你定义的标准是什么
  6. 字母+数字:^(?!\d+$)(?![a-zA-Z]+$)[a-zA-Z\d]+$
  7. 字母+特殊字符:^(?![a-zA-Z]+$)(?![@#$%^&]+$)[a-zA-Z@#$%^&]+$
  8. 数字+特殊字符:^(?!\d+)(?![@#$%^&]+$)[\d@#$%^&]+$
  9. 字母+数字+特殊字符:^(?!\d+$)(?![a-zA-Z]+$)(?![@#$%^&]+$)[\da-zA-Z@#$%^&]+$
  10.  
  11. 必须包含字母+字符+数字[-\da-zA-Z`=\\\[\];',./~!@#$%^&*()_+|{}:<>?]*((\d+[a-zA-Z]+[-`=\\\[\];',./~!@#$%^&*()_+|{}:<>?]+)|(\d+[-`=\\\[\];',./~!@#$%^&*()_+|{}:<>?]+[a-zA-Z]+)|([a-zA-Z]+\d+[-`=\\\[\];',./~!@#$%^&*()_+|{}:<>?]+)|([a-zA-Z]+[-`=\\\[\];',./~!@#$%^&*()_+|{}:<>?]+\d+)|([-`=\\\[\];',./~!@#$%^&*()_+|{}:<>?]+\d+[a-zA-Z]+)|([-`=\\\[\];',./~!@#$%^&*()_+|{}:<>?]+[a-zA-Z]+\d+))[-\da-zA-Z`=\\\[\];',./~!@#$%^&*()_+|{}:<>?]*
  12.  
  13. 数字+字母+字符 或 字母+字符 或 数字+字母 或 数字+字符6-^((?!\d+$)(?![a-zA-Z]+$)[a-zA-Z\d@#$%^&_+].{,})+$
  14.  
  15. (数字&&字母)|| 字符
  16.  
  17. ^(?!\d+$)(?![a-zA-Z]+$)(?![a-zA-Z-`=\\\[\];',./~!@#$%^&*()_+|{}:"<>?]+$)(?![0-9-`=\\\[\];',./~!@#$%^&*()_+|{}:"<>?]+$)
  1. /// <summary>
  2. /// 分页获取数据
  3. /// </summary>
  4. /// <param name = "strWhere">查询条件</param>
  5. /// <param name = "OrderfldName">排序字段名</param>
  6. /// <param name = "PageSize">页大小</param>
  7. /// <param name = "PageIndex">要获取的页内容</param>
  8. /// <returns>分页查询获取的数据集</returns>
  9. public DataSet GetListPlanRegList1(string strWhere, string OrderfldName, int PageSize, int PageIndex)
  10. {
  11. SqlParameter[] parameters = {
  12. new SqlParameter("@tblName", SqlDbType.VarChar, ),
  13. new SqlParameter("@fldName", SqlDbType.VarChar, ),
  14. new SqlParameter("@strWhere", SqlDbType.VarChar,),
  15. new SqlParameter("@OrderfldName", SqlDbType.VarChar, ),
  16. new SqlParameter("@PageSize", SqlDbType.Int),
  17. new SqlParameter("@PageIndex", SqlDbType.Int)
  18. };
  19. parameters[].Value = " dbo.Ex_ExamPlan INNER JOIN dbo.Ex_PlanPerson ON dbo.Ex_ExamPlan.id = dbo.Ex_PlanPerson.plan_id";
  20. parameters[].Value = " dbo.Ex_ExamPlan.*,dbo.Ex_PlanPerson.id as pid,dbo.Ex_PlanPerson.user_id,dbo.Ex_PlanPerson.user_name,dbo.Ex_PlanPerson.istraining,dbo.Ex_PlanPerson.creat_time,dbo.Ex_PlanPerson.isconfirm";
  21. parameters[].Value = strWhere;
  22. parameters[].Value = OrderfldName;
  23. parameters[].Value = PageSize;
  24. parameters[].Value = PageIndex;
  25. return SqlHelper.ExecuteDataSet(CommandType.StoredProcedure, "UP_GetRecordByPageOrder", parameters);
  26. }

验证电话:

  1. #region 验证手机号
  2.  
  3. /// <summary>
  4. /// 验证手机号
  5. /// </summary>
  6. /// <param name="source"></param>
  7. /// <returns></returns>
  8. public static bool IsMobile(string source)
  9. {
  10. //return Regex.IsMatch(source, @"^1[3-8]\\d{9}", RegexOptions.IgnoreCase);
  11. return Regex.IsMatch(source, @"^(0|86|17951|086)?(13[0-9]|15[012356789]|17[0678]|18[0-9]|14[57])[0-9]{8}$");
  12. }
  13. /// <summary>
  14. /// 座机
  15. /// 匹配3位或4位区号的电话号码,其中区号可以用小括号括起来,
  16. /// 也可以不用,区号与本地号间可以用连字号或空格间隔,
  17. /// 也可以没有间隔
  18. /// \(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}|\(0\d{3}\)[- ]?\d{7}|0\d{3}[- ]?\d{7}
  19. /// </summary>
  20. /// <param name="input"></param>
  21. /// <returns></returns>
  22. public static bool IsPhone(string input)
  23. {
  24. string pattern = "^\\(0\\d{2}\\)[- ]?\\d{8}$|^0\\d{2}[- ]?\\d{8}$|^\\(0\\d{3}\\)[- ]?\\d{7}$|^0\\d{3}[- ]?\\d{7}$";
  25. Regex regex = new Regex(pattern);
  26. return regex.IsMatch(input);
  27. }
  28. public static bool IsAllPhone(string input)
  29. {
  30. bool ret = false;
  31. if (IsPhone(input) || IsMobile(input))
  32. {
  33. ret = true;
  34. }
  35. return ret;
  36. }
  37. #endregion

like参数化模糊查询

  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3. //string strSql = "select * from tbl_music where musicname like '%@ii%'";//错误的
  4. string strSql = "select * from tbl_music where musicname like '%'+@name+'%'";//正确的
  5. SqlParameter[] p ={
  6. new SqlParameter("@name",SqlDbType.NVarChar)
  7. };
  8. p[0].Value = "爱";
  9. DataSet ds = DbHelperSQL.Query(strSql,p);
  10. GridView1.DataSource = ds.Tables[0];
  11. GridView1.DataBind();
  12. }

  

Asp.Net Webform 常用代码的更多相关文章

  1. ASP.NET 数据绑定常用代码及其性能分析

    用DataBinder.eval 绑定不必关心数据来源(Dataread或dataset).不必关心数据的类型eval会把这个数据对象转换为一个字符串.在底层绑定做了很多工作,使用了反射性能.正因为使 ...

  2. .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转

    .net mvc 站点自带简易SSL加密传输   因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...

  3. Asp.Net 常用代码-备用

    1.DropDownList 复制 //DropDownList DropDownList2.Items.Clear(); foreach (ListItem li in DropDownList1. ...

  4. 客户端的javascript改变了asp.net webform页面控件的值,后台代码中如何获取修改后的值。

    客户端的javascript改变了asp.net webform页面控件的值,后台代码中如何获取修改后的值.     无论是什么的html控件,只要加上了runat="server" ...

  5. ASP.NET WebForm中JavaScript修改了页面上Label的值,如何在后台代码中获取

    在用ASP.NET WebForm开发一个项目时,遇到如下的一个情况 页面上有一个Textbox控件,还有2个Label 控件. 当Textbox控件中的值更改时,两个Label控件上的值做相应的更改 ...

  6. 解析ASP.NET WebForm和Mvc开发的区别

    因为以前主要是做WebFrom开发,对MVC开发并没有太深入的了解.自从来到创新工场的新团队后,用的技术都是自己以前没有接触过的,比如:MVC 和EF还有就是WCF,压力一直很大.在很多问题都是不清楚 ...

  7. 解析ASP.NET WebForm和Mvc开发的区别 分类: ASP.NET 2013-12-29 01:59 11738人阅读 评论(5) 收藏

    因为以前主要是做WebFrom开发,对MVC开发并没有太深入的了解.自从来到创新工场的新团队后,用的技术都是自己以前没有接触过的,比如:MVC 和EF还有就是WCF,压力一直很大.在很多问题都是不清楚 ...

  8. ASP.Net WebForm温故知新学习笔记:一、aspx与服务器控件探秘

    开篇:毫无疑问,ASP.Net WebForm是微软推出的一个跨时代的Web开发模式,它将WinForm开发模式的快捷便利的优点移植到了Web开发上,我们只要学会三步:拖控件→设属性→绑事件,便可以行 ...

  9. 一、ASP.NET MVC 路由(一)--- ASP.NET WebForm路由模拟

    ASP.NET WebForm 应用,用户请求的是物理文件,其中包括静态页面和动态页面,在Url中的显示都是服务器中一个物理文件的相对路径.但是ASP.NET MVC就不同了,用户请求的是Contro ...

随机推荐

  1. redis缓存穿透-解决方案

    上面的解决方案个人觉得时有误的,因为就算缓存了value的null值,后面的接口请求还是会判断走数据库,所以看解决方案二 解决方案二: https://blog.csdn.net/muyi_amen/ ...

  2. 依赖jquery的select皮肤2

    这个下拉菜单存在于body中,不会受select父级overflow的影响,同样依赖于jquery. 缺陷是如果select上的样式不是定义在class上的,不能完全获取select上的样式. 不过, ...

  3. MySql触发器简介

    MySQL 数据库中触发器是一个特殊的存储过程,不同的是执行存储过程要使用 CALL 语句来调用,而触发器的执行不需要使用 CALL 语句来调用,也不需要手工启动,只要一个预定义的事件发生就会被 My ...

  4. 输出1~n中1的个数

    //输出1~n中1的个数,如f(1)=1,f(13)=6.通过测试,bymyself public class FindOnes{ public static void main(String arg ...

  5. react -搭建服务-2

    export const DEFAULT_TITLE = "你好"; // export const PRODUCT_SERVER_URL = "http://10.10 ...

  6. HTML标签与属性

    HTML中常用的一些标签和属性. 1.lang属性:搜索引擎      en:英文,  zh:中文 2.meta:元数据     charset属性:字符集编码方式 3.h1~h6:标题   一级标题 ...

  7. docker部署war+tomcat8

    注意:本文只是将jenkins.war作为一个war包来操作,实际上要使用jenkins还要同时安装git.maven等. 1.购买阿里云服务器(Ubuntu 18.04), 设置密码,root+pa ...

  8. BZOJ 3551: [ONTAK2010]Peaks加强版 Kruskal重构树+dfs序+主席树+倍增

    建出来 $Kruskal$ 重构树. 将询问点向上跳到深度最小,且合法的节点上. 那么,得益于重构树优美的性质,这个最终跳到的点为根的所有子节点都可以与询问点互达. 对于子树中求点权第 $k$ 大的问 ...

  9. CF contest 1216 Div3. F

    题目链接:Click here Solution: 看起来是贪心,其实不然... 我们定义\(f[i]\)表示仅覆盖\(1\sim i\)所需要的最小代价,那么对\(i\)为0的点来说,易得\(f[i ...

  10. THUSC 2017 游记

    Day0 早上在家里整理东西. 下午坐飞机去北京.(怎么又去北京,上周刚去的北京) 一开始飞机爬升的时候太无聊就睡着了.醒了以后就开始吃东西.吐槽一句:厦航的飞机就是好啊.上面的点心也比上次海航的好吃 ...