ASP.NET MVC+EF5 开发常用代码

              Asp.Net Mvc,EF 技术常用点总结

1.Asp.Net MVC

a)获得当前控制器名和当前操作的名称(action

                 1.Action 

          RouteData.Values["controller"].ToString();

          RouteData.Values["action"].ToString();

 

                 2.页面中(view

                    ViewContext.RouteData.Values["controller"].ToString().ToLower();   

                    ViewContext.RouteData.Values["action"].ToString().ToLower();         

 

  

                 3过滤器中                  

       filterContext.RouteData.Values["controller"].ToString().ToLower();  

       filterContext.RouteData.Values["action"].ToString().ToLower();  

 

                  4.获得当前的host, port                     

 //获得当前的HOST
 string strHost = Request.Url.Host;

//获得当前的端口号
 string strPort = Request.Url.Port.ToString();

 

b)ASP.NET MVC几种传值的方式

             A.从后台传值到页面

  1.通过return View(MOdel);

                   public ActionResult Index(){

                       List<T_User> Model=db.T_User.ToList();

                        Return View(Model);

                     }

              2. ViewData.Model

                     public ActionResult Index(){

                       List<T_User> Model=db.T_User.ToList();

                              ViewData.Model=Model;

                        Return View();

                     }

              3. ViewData[“”]  键值对的

                   public ActionResult Index(){

                       List<T_User> Model=db.T_User.ToList();

                             ViewData["Model"]=Model;

                        Return View();

                     }

               4. ViewBag.  动态类型的

                public ActionResult Index(){

                       List<T_User> Model=db.T_User.ToList();

                            ViewBag.Model=Model;

                        Return View();

                     }

               5.TempData[""]   TempData传值方式

 

      可以跨Action传递

                 TempData的数据至多只能经过一次Controller传递, 并且每个元素至多只能被访问一次,

   

                     例如一个用法为,抛出一个异常。跳转到error页面

                       public ActionResult Index3()
                        {

                         TempData["tempIndex"] = "出错了!";

                        Response.Redirect("/home/error");

                        return View();

                      }

 

 

             B.从页面传值到后台    

                          

  

c)ActionResult返回的几种类型

     1. ContentResult作用:输出纯文字

      语法: Content(内容)

 

2 JsonResult作用:异步请求时输出Json字符串(用于ajax请求)

  语法:Json(对象)

 

3 RedirectResult/RedirectToRouteResult作用:进行Action的跳转

  语法:Redirect("URL")/RedirectToAction("action","controller")

 

4 PartialViewResult作用:重用页面(类似于母版页或内嵌框架的功能)

  语法:PartialView()  

  语法: Html.RenderAction又走了一次Action, 取到最新的数据

        Html.RenderPartial走了一次视图,同时主页面的数据可以可传递到子页面

文件上传

Action代码:

            HttpPostedFileBase f = Request.Files["f1"];
            if (f != null)
            {
                string pathServer.MapPath("/files/" + Path.GetFileName(f.FileName) + "");
                f.SaveAs(path); 
            }

 

.aspx代码:表单需设置提交模式:

new { enctype = "multipart/form-data" }

 

 

6 FilePathResult/FileStreamResult/FileContentResult/FileResult作用:文件下载

语法:File(路径,文件类型/文件流,文件类型/字节数组,文件类型)

 

7 JavaScriptResult作用异步请求时输出脚本

语法:JavaScript("脚本代码")

 

8.ActionResult : 

 

d)MVC实现发送邮件

              代码实例: 

                 try

                 {

                    int customerID = 1;

                    string validataCode = System.Guid.NewGuid().ToString();

                    //填写电子邮件地址和显示名称

                    System.Net.Mail.MailAddress from = new System.Net.Mail.MailAddress("******@163.com", "够美丽");

                    //收件人地址和名称

                    System.Net.Mail.MailAddress to = new System.Net.Mail.MailAddress(t_user.UserName, "nide");

                    //设置好发送地址,和接收地址,接收地址可以是多个

                    System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();

                    mail.From = from;

                    mail.To.Add(to);

                    mail.Subject = "主题内容";

                    System.Text.StringBuilder strBody = new System.Text.StringBuilder();

                    strBody.Append("点击下面链接激活账号,48小时生效,否则重新注册账号,链接只能使用一次,请尽快激活!</br>");

                   //获得当前的HOST

                    string strHost = Request.Url.Host;

                    //获得当前的端口号

                    string strPort = Request.Url.Port.ToString();

                    strBody.Append("<a href='http://" + strHost + ":" + strPort + " /Adminx/user/UserIsCode?userId=" + t_user.Id + " &customerID=" + customerID + "&validataCode =" + validataCode + "'>点击这里</a></br>");

                    mail.Body = strBody.ToString();

                    mail.IsBodyHtml = true;//设置显示htmls

                    //设置好发送邮件服务地址

                    System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();

                    client.Host = "smtp.163.com";

                    //填写服务器地址相关的用户名和密码信息

                    client.Credentials = new System.Net.NetworkCredential("****@163.com", "******");

                    //发送邮件

                    client.Send(mail);

                }

                catch { }

 

 

e)密码加密

           public static string PwdEncryption(string pwd)
           {
               MD5 md5 = new MD5CryptoServiceProvider();

              //将字符串转为字节串
               byte[] data = System.Text.Encoding.Default.GetBytes(pwd);   

               byte[] md5Data = md5.ComputeHash(data);//将字节串进行加密

               return Convert.ToBase64String(md5Data);
            }

 

f)通过BundleCollection来加载js,css文件

      @Styles.Render()

       @Scripts.Render("~/bundles/Script/XiangYuHa")

g) 视图   

               @RenderBody(),

              @RenderSection("Scripts", required: false)  可以理解一个占位区域,required: false表示页面  可没有  ;

用法:@section Scripts{

    <script src="~/Scripts/My97DatePicker/WdatePicker.js"></script>            

         

 

 

          @Html.Partial("_Sidebar")  //加载部分视图

h)  @Html以及自定义扩展

i)控制器

             //让用户进行登陆

 

//重定向        

 filterContext.HttpContext.Response.RedirectPermanent("~/Login/UserLogin");

j)获得客户端ip

        public string getIP()
        { 
            string realRemoteIP = "";

            if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
            {
                realRemoteIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(',')[0];
            }

            if (string.IsNullOrEmpty(realRemoteIP))
            {
                realRemoteIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
            }

            if (string.IsNullOrEmpty(realRemoteIP))
            {
                realRemoteIP = System.Web.HttpContext.Current.Request.UserHostAddress;
            }

            return realRemoteIP;

 

k)保存cookie

                 

                  //定义一个cookie
                    HttpCookie hc = new HttpCookie("C_XIANGYUHAUID");

                    //保存路径
                    hc.Path = "/";

                    string cookie = isOk.ToString();

                     //cookie的值
                    hc.Value = cookie;

                         //设置失效时间
                    hc.Expires = DateTime.Now.AddMonths(2);

                     //添加cookie
                    HttpContext.Response.AppendCookie(hc);

                      //保存cookie  
                    HttpContext.Response.Cookies.Add(hc);

                // 获得cookie集合
                 HttpCookieCollection hc = filterContext.HttpContext.Request.Cookies;

               //获得具体的值
               HttpCookie id = hc.Get("C_XIANGYUHAUID");

 

2.EF

a) EF  添加(Add

        1. DbEF 上下文对象 

         Db.实体类型.Add(实体对象);

           //保存修改,EF 将更新数据库,并返回受影响的行数

           SaveChanges();          

          实例:

           db.T_User.Add(t_user);

           int num= db.SaveChanges();

        2.通过状态来添加:
           db.Entry<T_User>(t_user).State = EntityState.Added;

            int num= db.SaveChanges();

          注意:EF 会把id查出来,就是说,通过t_user.id就可以拿到id这个值了。

 

b) EF   修改 (Update

          1.修改整个实体

              //把鼠标放到  EntityState.Modified; 上面就会有相应的解释
               db.Entry(t_user).State = EntityState.Modified; 
                   
//返回受影响的行 int num = db.SaveChanges();

 

 

            2.修改实体部分 

          //主键是必须的,然后是要修改的属性的值。

           T_User user = new T_User() { Id = Convert.ToInt32(userId), Age= 12, UserState = 1 };

                user = db.T_User.Attach(user);

                DbEntityEntry<T_User> entry = db.Entry<T_User>(user);

                entry.State = System.Data.EntityState.Unchanged;

                //要修改的属性的状态改成要修改

                entry.Property(a => a.Age).IsModified = true;

                entry.Property(a => a.UserState).IsModified = true;

                //去掉验证

                db.Configuration.ValidateOnSaveEnabled = false;

                //保存回数据库

                db.SaveChanges();

 

 

c) EF  进行删除(Dele)

         

 1.Remove()方法进行删除
                   T_User t_user = db.T_User.Find(id);

                      db.T_User.Remove(t_user);

                        //返回受影响的行数

                      Int num=db.SaveChanges();   

 

               2.通过状态,Deleted

                 db.Entry<T_User>(t_user).State = EntityState.Deleted;

                   Int num=db.SaveChanges();  

               3. 通过Attach删除, 只有id的情况下

              

                 //new 一个实体
                 Entity tepc = new Entity{ ID = 1 };

                   //附加到EF  Entity 中
                  db.Entity.Attach(tepc);

                   db.Entity.Remove(tepc);

                  int num = db.SaveChanges();  

 

 

d) EF  实现查询

        1.查找Find()

          // 使用主键来查找上下文实体,可以找出还未保存到数据库,但在EF上          

              下文中的实体。具体注释,请将鼠标移至代码处。

           T_User t_user = db.T_User.Find(id);

      

        2.筛选where()

             //表示筛选id==1的的实体

              //FirstOrDefault()表示返回一个实体,如果没筛选到数据就返回一个默认的值,                         

                 //First() :这个在没筛选到数据时,对其操作肯定会报错的,null嘛

                 //以上两个 都是满足条件后返回第一个实体,

               T_User t_user  =  db.T_User.Where(u => u.Id == 1).FirstOrDefault();

                  //返回年龄大于20,而且性别等于0的第一个用户。

                  T_User t_user db.T_User.

                              Where(u => u.Age >20)  

                                  .FirstOrDefault(u=>u.UserSex==0);

        3.集合ToList()

                   //查找数据库里T_User的集合。

                    List< T_User> list=db.T_User.ToList<T_User>();

                      //根据筛选条件来返回一个集合

                    List< T_User> list=db.T_User.Where(u => u.Age>20).ToList<T_User>();

                      //Where通过Contains(“a”)来返回名称中所有包含”a”的用户,相当与     sql中的 like  

     

                    List<T_User>list=db.T_User

                                   .Where(p=> .UserName.Contains(“a”))

                                        .ToList<T_User>();

            

 

     4.排序三部曲

              //升序

            List<T_User> list = db.T_User.

                                  OrderBy(u => u.Id).ToList<T_User>();

            //降序

            List<T_User> listDesc = db.T_User

                                   .OrderByDescending(u => u.Id).ToList<T_User>();

            //先进行id的升序,然后在对性别进行升序

            List<T_User> list2 = db.T_User

                             .OrderBy(u => u.Id).ThenBy(u => u.UserSex).ToList<T_User>();

            //先进行id的降序,然后在对性别进行降序

            List<T_User> listDesc2 = db.T_User

                            .OrderBy(u => u.Id).ThenBy(u => u.UserSex).ToList<T_User>();

 

            //注意:排序必须在where筛选之后的

           //如: 

           //必须先筛选后,再排序,和sql语句是一致的

            List<T_User> whereOrderList = db.T_User

                    .Where<T_User>(u=>u.UserSex==0).OrderBy(u => u.Id).ToList<T_User>();

 


//将生成 where like 'parentId%' 查询语句
// var data_Result = context.CityInfos.Where(t => t.Id.ToString().StartsWith(parentId)).ToList();

 

  5.映射:(建议使用这种方式加载数据

         

           // 完全投影成一个匿名类型,属性一致

            var t_user = db.T_User.Select(p => p);
            //只要一些属性,只要id,和性别(sex),这个匿名对象只有ID和sex

              // 注意:在select 函数之前,最好加上where() 函数
               var list = db.T_User.Select(p => new{
                Id = p.Id,
                Sex = p.UserSex
            });

         Var :匿名类型,有些地方管他叫语法唐,你赋给var 什么类型,编译器,就把它编译成什么类型。如上代码会变成一个类,有一个ID属性和Sex的属性。          

posted @ 2014-05-29 09:41  胡一飘  阅读(693)  评论(1编辑  收藏  举报