MVC简介,MVC创建,MVC添加数据(请求参数技巧,区别GET POST),数据传递到前端(ViewData)
MVC_1 MVC简介 ASP.NET web开发方式
WebForm开发
Asp.Net Mvc开发
MVC是09年微软对外公布的第一个开源的表示层框架,这是微软的第一个开源项目
MVC的目的不是取代WebFrom开发,只是web开发的另一种选择,但是为目前的主流开发方式
MVC请求模型图如下
可以看出webFrom是强耦合的关系(aspx继承自sapx.cs),而MVC模式职责明确
如何创建?
新建项目-web-web应用程序-MVC
观察新建好的工程文件,会发现微软自动帮我们引用了很多有用的dll,比如EF或者jq等等,Scripts文件夹 下
由我们需要的js,$文件夹\color{HotPink}{Controllers文件夹}$是我们需要关注的,右键-添加控制器(通常我们选择空),$记住后缀千万别改\color{HotPink}{记住Controller后缀千万别改}$,例如HomeController.cs,然后我们观察这个类,发现有一个Index方法,里面有一句return View();,这个是找视图的,右键这个方法名字Index(),添加视图,然后我们发现再View文件夹下多了一个Home文件夹,这个文件夹跟我们的Controller名字一样 ,这就是微软提出的约定大于配置 。方法的名称与试图名称一致,视图放在Views文件夹下的当前方法所在控制器名称一致的文件夹下 。
直接运行起来我们发现是index页面,因为在Global.asax的类里面,有一个Application_Start()方法,这是程序启动时候会执行的方法,里面的这一句RouteConfig.RegisterRoutes(RouteTable.Routes);,其中的RegisterRoutes 方法是配置我们的路由的,观察我们的路由规则,以及defaults,就不难理解跳转了
1 2 3 4 5 6 7 8 9 10 public static void RegisterRoutes (RouteCollection routes ) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}" ); routes.MapRoute( name: "Default" , url: "{controller}/{action}/{id}" , defaults: new { controller = "Home" , action = "Index" , id = UrlParameter.Optional } ); }
MVC添加数据 我们以请求Home/AddUserInfo为例,即HomeController下的AddUserInfo方法接收数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 public ActionResult AddUserInfo (UserInfo userinfo ) { EfFirstModleEntities db = new EfFirstModleEntities(); userinfo.RegTime = DateTime.Now; db.UserInfo.Add(userinfo); if (db.SaveChanges()>0 ) { return RedirectToAction("Index" ); } else { return Content("添加失败" ); } }
上面我们可以看到在MVC里我们用RedirectToAction()这个方法重定向 。Content()这个方法返回数据,必须是String类型 ,并且我们这里的参数是UserInfo,这里是一个MVC的技巧,就是如果From表单下的标签中的name的值是跟我们的Mdole类中的属性名字一样,那么我们参数中的Modle类对象就自动接收返回的数据,当然还有另外的方法就是参数的名字跟表单的name的值一样这样也可以 ,在MVC中,如果表单提交的是当前方法的话,那么在当前方法中如何砍断是post请求还是get请求,我们的做法是重载当前方法并且带参数,以及方法名前面带上post的标签 ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [HttpPost ] public ActionResult Register (UserInfo userinfo ) { EfFirstModleEntities db = new EfFirstModleEntities(); userinfo.RegTime = DateTime.Now; db.UserInfo.Add(userinfo); if (db.SaveChanges() > 0 ) { return Content("OK" ); } else { return Content("添加失败" ); } }
列表展示 可以把内容赋值给ViewData“”
1 2 3 4 5 6 7 public ActionResult Index ( ) { EfFirstModleEntities db = new EfFirstModleEntities(); var userInfoList=db.UserInfo.Where(u => true ); ViewData["UserInfoList" ] = userInfoList; return View(); }
1 2 3 4 5 6 7 8 9 10 11 12 @foreach (var userInfo in (IQueryable<UserInfo > ) ViewData["UserInfoList"])//强转对象 { <tr > <td > @userInfo.Id</td > <td > @userInfo.UserName</td > <td > @userInfo.UserPwd</td > <td > @userInfo.RegTime</td > <td > <a href ="/UserInfo/Edit" > 修改</a > </td > <td > <a href ="/UserInfo/Details" > 详细</a > </td > <td > <a href ="/UserInfo/Delete" > 删除</a > </td > </tr > }