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走了一次视图,同时主页面的数据可以可传递到子页面

5 文件上传

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. Db是EF 上下文对象

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>();

5.映射:投影

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

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

var list = db.T_User.Select(p => new

{

Id = p.Id,

Sex = p.UserSex

});

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

由于本人水平有限,只是把经常写的代码,集合起来,希望有大神给些好建议!

ASP.NET MVC+EF5 开发常用代码,布布扣,bubuko.com

时间: 2024-10-12 20:16:36

ASP.NET MVC+EF5 开发常用代码的相关文章

ASP.NET MVC 网站开发总结(三) ——图片截图上传

本着简洁直接,我们就直奔主题吧,这里需要使用到一个网页在线截图插件imgareaselect(请自行下载). 前台页面: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="css/imgareaselect-default.css" /> </head> <

ASP.NET MVC 过滤器开发与使用

文章来源:http://www.cnblogs.com/JinvidLiang/p/4660200.html(感谢) ASP.NET MVC 过滤器开发与使用 ASP.NET MVC 中给我们提供了内置的过滤器,通过过滤器,我们可以在控制器内的方法前后,添加必须的业务逻辑,如权限验证,身份验证,错误处理等. 今天,我们主要介绍3个过滤器:OutputCacheAttribute,AuthorizeAttribute,HandleErrorAttribute. 我们会根据这三个内置过滤器,分别举不

像asp.net Mvc一样开发nodejs+express Mvc站点

像asp.net Mvc一样开发nodejs+express Mvc站点 首先,我是个c#码农.从事Mvc开发已然4个年头了,这两年前端MVC的兴起,我也跟风学了一些,对前端的框架也了解一些,angularJs,requirejs,commonJs,backbone等等前端的mvc框架也异常流行,与这些前端的流行框架一同火起来的还有node.js. Node.js将javascript作为服务器端的代码开发,由其语言特性(单线程,异步)等以高效率高吞吐著称.这里不会去讨论node.js的好的坏的

ASP.NET MVC模块化开发——动态挂载外部项目

原文:ASP.NET MVC模块化开发--动态挂载外部项目 最近在开发一个MVC框架,开发过程中考虑到以后开发依托于框架的项目,为了框架的维护更新升级,代码肯定要和具体的业务工程分割开来,所以需要解决业务工程挂载在框架工程的问题,MVC与传统的ASP.NET不同,WebForm项目只需要挂在虚拟目录拷贝dll就可以访问,但是MVC不可能去引用工程项目的dll重新编译,从而产生了开发一个动态挂在MVC项目功能的想法,MVC项目挂载主要有几个问题,接下来进行详细的分析与完成解决方案 一般动态加载dl

时间:第1周9月16日;主题:初识ASP.NET MVC项目开发(一)

Part I:回顾及提问 ==================== 1. ASP.NET MVC是微软公司.NET平台上的一个______________,它为开发者提供了一种构建结构良好的Web应用程序的方式. 2. 自2007年首次公布预览以来,作为_____________的替代品,ASP.NET MVC的普及度已明显提高,现在很多大型Web应用程序都是使用这一技术构建的. 3. 为了简化软件开发的复杂度,以一种概念简单却又权责分明的架构来贯穿整个软件开发流程,将业务逻辑层与_______

ASP.NET MVC 网站开发总结(一)

历经一个多月的努力,工作室的门户网站终于结束了内部公测. 仔细算一下,大概把网站开发出1.0版本大概用了一个月的时间(主要是利用课余时间),其后大概用了十几天来测试.完善.改进,最终定型.感觉最有难度的既不是后台代码的编写,也不是前台页面的编写,而是将不同人编写的前台和后台很好的拼接起来(当然若是前台和后台都是同一个人做,当然不存在这个问题^_^).这也是自己第一次与工作室的伙伴共同完成一个网站.简单的总结一下,团队开发网站需要注意的地方以及收获吧!(其中我主要的任务是后台代码编写以及后台与前台

ASP.NET MVC——CodeFirst开发模式

Entity Framework框架提供了几种开发模式,比如Database First,Model First,Code First.Database First是最老也是应用得最广泛的一种设计方式.Database First这种方式的设计高度依赖于数据库中表的结构,根据表及表间的关系来创建模型.如果后期需求有所变更或者功能有很大变化的话,需要涉及到更改数据库所付出的代价将会很大,因为之前编写好的代码将不再适用于新的表,我们必需重构以更改代码中的逻辑以适应更改之后的表.Model First

ASP.NET MVC 网站开发总结(四)——校友平台开发总结

又历经一个多月的努力,学校的一个校友平台项目也接近内测的尾声了,简单的总结一下这次的项目开发. 与上次做WingStudio工作室的门户网站相比,同样是团队开发,参与的人员多了一个,用的时间也差不多一个月,但从总体做的情况来看,这次比上一次要做的好得多(不论是页面的样式还是后台的模块化封装),这是进步也是必然,这次自己的任务仍旧是负责后台以及后台与前台的拼接. 总的来说,用ASP.NET MVC开发网站的效率是相当高的(而且也相当的好部署),特别是针对后台的开发,只要前期对页面的功能分析到位,立

[转]Asp.NET MVC Widget开发 - ViewEngine

本文转自:http://www.cnblogs.com/hsinlu/archive/2011/03/02/1968796.html 在Asp.NET开发博客类系统,我们经常都会用到Widget,像在线好友.最近访问好友.最新留言等,关于Asp.NET MVC与Asp.NET视图的差异,这里不再说了,大家可去查一下,接下来我以“我的好友”列表来要介绍在Asp.NET MVC实现这一功能以及结构设计. 开发工具:VS 2010 EN 开发语言:Visual C# ASP.NET MVC 3 Asp