博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET MVC+EF5 开发常用代码
阅读量:5887 次
发布时间:2019-06-19

本文共 10161 字,大约阅读时间需要 33 分钟。

              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
Model=db.T_User.ToList(); Return View(Model); } 2. ViewData.Model public ActionResult Index(){ List
Model=db.T_User.ToList(); ViewData.Model=Model; Return View(); } 3. ViewData[“”] 键值对的 public ActionResult Index(){ List
Model=db.T_User.ToList(); ViewData["Model"]=Model; Return View(); } 4. ViewBag. 动态类型的 public ActionResult Index(){ List
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小时生效,否则重新注册账号,链接只能使用一次,请尽快激活!
"); //获得当前的HOST string strHost = Request.Url.Host; //获得当前的端口号 string strPort = Request.Url.Port.ToString(); strBody.Append("点击这里
"); 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
entry = db.Entry
(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的属性。          

转载于:https://www.cnblogs.com/Hangle/p/3758403.html

你可能感兴趣的文章
Memcache的安装
查看>>
Perl Learning - 18 (unless, until, elsif, for)
查看>>
使用Heartbeat V1实现nfs作为共享存储的高可用
查看>>
linux 网站架设调优Apache(三)
查看>>
网页变化监控
查看>>
查看Linux版本,centos?redhat?
查看>>
【Android UI设计与开发】第07期:底部菜单栏(二)Fragment的详细介绍和使用方法...
查看>>
在32位Win7下安装MySQL5.7.10安装配置过程
查看>>
squid透明代理和反向代理配置过程
查看>>
汽车常识全面介绍 - 传动系统
查看>>
vim攻略
查看>>
51CTO交流摘录(1):SOC的定义、适用性和组成
查看>>
关于数据包分析中Fragment offset(分片偏移)字段的十六进制码解读
查看>>
suse linux 安装无线网卡驱动
查看>>
jetty9系列之应用部署
查看>>
我的友情链接
查看>>
缓存更新策略
查看>>
Bind Service方法
查看>>
Linux:linux压缩文件解析
查看>>
GNS3 学习软件
查看>>