• 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的属性。          

  • 相关阅读:
    软链接的应用(在同一目录下方便查看日志)
    decimal模块
    python的request包
    jmeter的环境配置
    java交互方式中的同步与异步
    mysql数据库的快捷键
    [LeetCode]Number of Islands
    [LeetCode]Binary Tree Right Side View
    [LeetCode]House Robber
    [微软实习生2014]K-th string
  • 原文地址:https://www.cnblogs.com/Hangle/p/3758403.html
Copyright © 2020-2023  润新知