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>();
//将生成 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的属性。
ASP.NET MVC+EF5 开发常用代码的更多相关文章
- Asp.net Mvc模块化开发之分区扩展框架
对于一个企业级项目开发,模块化是非常重要的. 默认Mvc框架的AreaRegistration对模块化开发真的支持很好吗?真的有很多复杂系统在使用默认的分区开发的吗?我相信大部分asp.net的技术团 ...
- ASP.NET MVC企业开发的基本环境
ASP.NET MVC企业开发的基本环境[资源服务器概念] 学完了ASP.NET MVC4 IN ACTION 六波以后 企业开发演习 标签:AaronYang 茗洋 EasyUI1.3.4 ...
- ASP.NET MVC 网站开发总结(三) ——图片截图上传
本着简洁直接,我们就直奔主题吧,这里需要使用到一个网页在线截图插件imgareaselect(请自行下载). 前台页面: <!DOCTYPE html> <html> < ...
- ASP.NET MVC框架开发系列课程 (webcast视频下载)
课程讲师: 赵劼 MSDN特邀讲师 赵劼(网名“老赵”.英文名“Jeffrey Zhao”,技术博客为http://jeffreyzhao.cnblogs.com),微软最有价值专家(ASP.NET ...
- 像asp.net Mvc一样开发nodejs+express Mvc站点
像asp.net Mvc一样开发nodejs+express Mvc站点 首先,我是个c#码农.从事Mvc开发已然4个年头了,这两年前端MVC的兴起,我也跟风学了一些,对前端的框架也了解一些,angu ...
- Asp.net Mvc模块化开发系列(目录)
模块化开发是非常重要的,模块化开发是个系统性问题,为此我觉得有必须要写一个系列的文章才能基本说的清楚 那又为什么要写一个目录呢? 其一.是对我昨天承诺写一个系列新的文章的回应 其二.是先写出一个大纲, ...
- Easyui + asp.net mvc + sqlite 开发教程(录屏)适合入门
Easyui + asp.net mvc + sqlite 开发教程(录屏)适合入门 第一节: 前言(技术简介) EasyUI 是一套 js的前端框架 利用它可以快速的开发出好看的 前端系统 web ...
- 36个Android开发常用代码片段
//36个Android开发常用代码片段 //拨打电话 public static void call(Context context, String phoneNumber) { context.s ...
- ASP.NET MVC 网站开发总结(一)
历经一个多月的努力,工作室的门户网站(http://www.wingstudio.org)终于结束了内部公测. 仔细算一下,大概把网站开发出1.0版本大概用了一个月的时间(主要是利用课余时间),其后大 ...
随机推荐
- D:Balanced Lineup
总时间限制: 5000ms 内存限制: 65536kB描述For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always lin ...
- 最大流 总结&&做题记录
最近一直很忙,为了节省时间,从今以后的题解会 一个专题 写一篇. 刷了一些题后,有了以下总结: 模型要点: 1.构造流量平衡,在满足流量平衡的情况下,找到要让什么最大. 2.一般用于判断性问题,即所有 ...
- Yii2 主从 数据库
配置方法 参考资料:http://www.linuxidc.com/Linux/2015-07/120134.htm 读写分离(Read/Write Splitting). 1.原理:让主数据库(ma ...
- win7下用python3.3获取cable modem的设备信息
毕业一年多了,一直做cable modem的测试,总是觉得在国内这一行的人才很少,想找个师傅真的很不容易. 苦闷了许久之后,终于决定,自己去写点东西,万一就找到同行了呢? 下面就是本小姐写的第一篇博客 ...
- iOS开发中的数据安全隐患和解决方案
移动互联网的兴起,每天都会涌现大量的app产品,无论公司开发还是个人开发,大家都在追求更快的抢占市场,但是确忽略了打磨产品,也忽略了移动开发中的数据安全隐患,如果我们用Charles工具,很容易截获到 ...
- javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")
原因很简单:因为在js中{}表示一个语句块(代码段),所有加上"()"表示表达式
- tensorflow3
参考文献:tensorflow_manual_cn.pdf 一.tensorflow和caffe对应: graph-->.prototxt定义的网络结构 session-->solver( ...
- PHP-query 的用法
Jquery Jquery实际上相当于一个升级版的JS,Jquery里面封装了很多的东西,Jquery的功能要比JS强大,用起来比JS方便.Jquery和JS都属于JS,只不过Jquery是封装了一个 ...
- Flash Builder如何自定义工作目录
熟悉了myeclipse可以自定义目录的设置,今天在使用flash builder 时,当导入一个工程到现有项目空间 选择根目录,点击浏览的时候出现的目录是C:\Users\Administrator ...
- Android 开发错误信息001
Error:Execution failed for task ':app:dexDebug'. > com.android.ide.common.process.ProcessExceptio ...