ASP.NET MVC 学习第二天

今天使用mvc完成简单的增删改,内容比较简单,来熟悉一下mvc,数据库操作是用前面的ef,也算是温习一下ef吧。

新建mvc项目,在项目中的Models内添加ef,我这里只操作一下简单的user表。里面有id,name,sex,age字段。完成后如下

在Controller中添加user控制器,添加增删改查方法,下面是我在user控制器中添加的方法

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Data.Entity.Infrastructure;
 4 using System.Linq;
 5 using System.Web;
 6 using System.Web.Mvc;
 7
 8 namespace MvcCRUD.Controllers
 9 {
10     public class UserController : Controller
11     {
12         //
13         // GET: /User/
14         Models.EFtestEntities db = new Models.EFtestEntities();
15         /// <summary>
16         /// 当做查询
17         /// </summary>
18         /// <returns></returns>
19         public ActionResult Index()
20         {
21             //查询方法,在这个方法中要使用ef从数据库中查询出来数据
22             //接下来需要将查询出来的数据传递到视图页面,其实视图页面访问时也是编译成一个类
23             //视图页面类有个Model的属性,
24             List<Models.User> userList = db.Users.Where(u => u.Id != "").ToList();
25             return View(userList);
26         }
27
28         public ActionResult Index1()
29         {
30             //查询方法,在这个方法中要使用ef从数据库中查询出来数据
31             //接下来需要将查询出来的数据传递到视图页面,其实视图页面访问时也是编译成一个类
32             //视图页面类有个Model的属性,
33             List<Models.User> userList = db.Users.Where(u => u.Id != "").ToList();
34             ViewBag.Index1 = userList;
35             return View("Index");
36         }
37         public ActionResult Index2()
38         {
39             //查询方法,在这个方法中要使用ef从数据库中查询出来数据
40             //接下来需要将查询出来的数据传递到视图页面,其实视图页面访问时也是编译成一个类
41             //视图页面类有个Model的属性,
42             List<Models.User> userList = db.Users.Where(u => u.Id != "").ToList();
43             ViewData["Index2"] = userList;
44             return View("Index");
45         }
46         public ActionResult Index3()
47         {
48             //查询方法,在这个方法中要使用ef从数据库中查询出来数据
49             //接下来需要将查询出来的数据传递到视图页面,其实视图页面访问时也是编译成一个类
50             //视图页面类有个Model的属性,
51             List<Models.User> userList = db.Users.Where(u => u.Id != "").ToList();
52             TempData["Index3"] = userList;
53             return View("Index");
54         }
55
56         public string add(Models.User userModel)
57         {
58             //随机数
59             userModel.Id = Guid.NewGuid().ToString();
60             db.Users.Add(userModel);
61             int res = -1;
62             res = db.SaveChanges();
63             if (res > 0)
64                 return "add suc";
65             return "add fail";
66         }
67         public string remove(string id)
68         {
69             Models.User userModel = new Models.User();
70             userModel.Id = id;
71             db.Users.Attach(userModel);
72             db.Users.Remove(userModel);
73             int res = -1;
74             res=db.SaveChanges();
75             if (res > 0)
76                 return "remove suc";
77             return "remove fail";
78         }
79         [HttpGet]
80         public ViewResult update(string id)
81         {
82             Models.User userModel = db.Users.Where(u => u.Id == id).FirstOrDefault();
83             return View(userModel);
84         }
85         [HttpPost]
86         public string update(Models.User userModel)
87         {
88             DbEntityEntry<Models.User> entry = db.Entry<Models.User>(userModel);
89             entry.State = System.Data.EntityState.Unchanged;
90             entry.Property("name").IsModified = true;
91             int res = -1;
92             res = db.SaveChanges();
93             if (res > 0)
94                 return "update suc";
95             return "update fail";
96         }
97     }
98 }

然后添加index视图

 1 @{
 2     Layout = null;
 3 }
 4
 5 <!DOCTYPE html>
 6
 7 <html>
 8 <head>
 9     <meta name="viewport" content="width=device-width" />
10     <title>Index</title>
11 </head>
12 <body>
13     <div>
14         @*注意,这是razor视图引擎的语法,使用@符号就是说明要写c#内容了*@
15         @{
16             object data = null;
17             if(Model!=null)
18             {
19                 data = Model;
20             }
21             if (ViewBag.Index1 != null)
22             {
23                 data = ViewBag.Index1;
24             }
25             if(ViewData["Index2"]!=null)
26             {
27                 data = ViewData["Index2"];
28             }
29             if (TempData["Index3"] != null)
30             {
31                 data = TempData["Index3"];
32             }
33             <table border="1">
34                 <tr>
35                     <th>姓名</th>
36                     <th>性别</th>
37                     <th>年龄</th>
38                     <th>操作</th>
39                 </tr>
40
41                 @foreach (MvcCRUD.Models.User temp in data as List<MvcCRUD.Models.User>)
42                 {
43                     <tr>
44                     <td>@temp.name</td>
45                     <td>@temp.sex</td>
46                     <td>@temp.age</td>
47                     <td>
48                         <a href="../user/update/@temp.Id">修改</a>
49                         <a href="../user/remove/@temp.Id">删除</a>
50                     </td>
51                     </tr>
52                 }
53             </table>
54         }
55     </div>
56 </body>
57 </html>

添加update视图

 1 @{
 2     Layout = null;
 3 }
 4 @using MvcCRUD.Models;
 5 <!DOCTYPE html>
 6
 7 <html>
 8 <head>
 9     <meta name="viewport" content="width=device-width" />
10     <title>update</title>
11 </head>
12 <body>
13     <form action="../update" method="post">
14         <input type="hidden" name="Id" value="@Model.Id" />
15         <div>
16             <table>
17                 <tr>
18                    <td>姓名:<input type="text" name="name" value="@Model.name" /></td>
19                 </tr>
20
21             </table>
22             <input type="submit"  value="提交"/>
23         </div>
24     </form>
25 </body>
26 </html>

现在我们可以访问user控制器下的index,index1,index2,index3方法(页面内容都是一样的),下面是我的效果图

之所以一个查询写了三个方法是想说明控制器向view传递值有这四个方法。现在一次说一下这几个传值方法,

Model方法传值,前台页面类是有这个属性的,而前台页面类又是有控制器创建的,当创建时,控制器就会把Model赋给前台页面类的Model属性。注意,控制器中的view()是接受参数的,所以可以将model传递进去。viewbag是个动态类型,可以动态的添加属性,这与js中给类动态添加属性很像哦。viewdata是个键值对,这个没什么好说的。很好理解,添加键的同时赋值。这里需要说明的是viewbag与viewdata的数据是共享的,例如:给viewbag.temp赋值,使用viewdata["temp"]是可以取到这个值的,反过来亦然。tempdata也可以传值,但与前两者数据是不共享的。他有特殊的作用,以后学习。顺便说一下Model属性也可以通过viewdata.Model来访问。

这几个index方法里面我还用到了访问非同名的视图,方法就是在view()方法中传值指定要加载的视图。这是同一个控制器的写法,但是如果要加载其他控制器的视图,这里就要写全了,例如view("~/home/index");

点击修改,会是一个get请求,所以会走public ViewResult update(string id)这个方法,注意这里的参数名必须为id,因为我们的路由就这么规定的。例如点击学生2的修改,这里我只对名字进行修改,

这里还需要注意的是我们的updata视图里,每个元素的name值需要与Model的属性名一样,这样当提交的时候,它会自动的将表单中name值赋给Model的相应属性值。

例如我的表单中有个隐藏域,name=“Id”,姓名的txt的name="name",这样,当提交时,为post的方式,调用public string update(Models.User userModel)方法,这时就会将表单中的name=“Id”的值赋给Model.Id,name="name"的值赋给Model.name;

删除方法就更简单了,在这里就不多说了。先来说下cshtml内的用法吧

当写@时,razor视图引擎就会认为这后面就是c#代码了,而出现尖括号视图引擎就会认为是html标签。它会在两者之间自动的切换,特别灵活。

ASP.NET MVC 学习第二天

时间: 2024-08-27 11:03:47

ASP.NET MVC 学习第二天的相关文章

Asp.Net MVC学习记录之“一个实体对象不能由多个 IEntityChangeTracker 实例引用”

原文:浅谈 js 正则之 test 方法 其实我很少用这个,所以之前一直没注意这个问题,自从落叶那厮写了个变态的测试我才去看了下这东西.先来看个东西吧. ? 1 2 3 4 5 var re = /\d/; console.log( re.test("1") ); console.log( re.test("1") ); console.log( re.test("1") ); console.log( re.test("1"

ASP.NET MVC学习之视图篇(2)

继ASP.NET MVC学习之视图(1)学习 4.HTML辅助器 虽然在ASP.NET MVC中我们已经摆脱了ASP.NET的控件,但是对于页面中需要循环标签的情况依然还是存在,可能很多人认为用foreach就可以完成,但是这个仅仅只是针对单个循环,如果多个循环中都要使用到同样的标签呢?下面笔者就介绍两种方式让我们事半功倍. 首先是针对单个页面的内联辅助器,如果我们遇到只要在单个页面中不断使用的标签的时候,这个方式非常的轻便,比如下面的代码根据文本内容和样式类生成li标签的辅助器(Views/H

ASP.NET MVC学习之模型验证篇

一.学习前的一句话 在这里要先感谢那些能够点开我随笔的博友们.慢慢的已经在博客园中度过一年半了,伊始只是将博客园作为自己学习的记录本一样使用,也不敢将自己的随笔发表到博客园首页,生怕自己的技艺不高,反倒成了笑话.但是随着时间的推移,再也按捺不住这种想法,于是就写了一篇随笔发表到博客园首页.让我意想不到的是有许多人都看了,而且也留下了评论.这让我鼓起勇气写了第二.三.四篇.到现在的连载,这里我希望那些从未发表过随笔的人可以尝试去发表,在这里他人不会嘲讽你,而是会给你更好的建议.说了这么多下面我们继

ASP.NET MVC 学习

ASP.NET MVC 学习 一. 学习MVC基础 MVC的三个字母分别代表什么意思? M—Model(模型).V—View(视图).C—Controller(控制器) VS2010 中建立MVC应用程序会自动生成哪些文件夹? Controllers – 放置Controller 类,处理URL 请求. Models – 放置业务实体类,表示和操作数据. Views – 放置UI 模板文件,负责展示输出结果. Scripts – 放置Javascript 类库文件和.js 文件. Content

ASP.NET MVC学习---(五)MVC初体验

经过之前n多的铺垫 我们已经大概了解了这个姓m名vc的家伙了 那么今天我们就来体验一把 怎么体验呢? 就来做一个小例子吧~ mvc增删改查的例子 数据库还是之前我们的老朋友 关系图: 表中的数据已填好 T_Users 将就着用着吧,哈哈 现在要求对T_Users表进行增删改查 开搞~ 回到之前新建的mvc项目 在Controllers文件夹下新建一个名为Home的空控制器 当浏览器请求Home下面的Index方法的时候返回什么? 当然是主页面啦 这里我们的主页面就是显示T_Users数据列表 代

ASP.NET MVC学习系列(二)-WebAPI请求

继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现数据调用. 继续使用上一文章中的示例,添加一个index.html页面,添加对jquery的引用. 一.无参数Get请求 一般的get请求我们可以使用jquery提供的$.get() 或者$.ajax({type:"get"}) 来实现: 请求的后台Action方法仍为上篇文章中的GetU

ASP.NET MVC学习之控制器篇

一.前言 许久之后终于可以继续我的ASP.NET MVC连载了,之前我们全面的讲述了路由相关的知识,下面我们将开始控制器和动作的讲解. ASP.NET MVC学习之路由篇幅(1) ASP.NET MVC学习之路由篇幅(2) ASP.NET MVC学习之路由篇幅(3) 二.正文 1.IController的使用 这个接口可能很多人都没有使用过,但是我们常用的Controller类实现了这个接口,而且只要实现这个接口就可以作为一个控制器,当然很多的内部的处理就要我们自己去做了. 下面我利用ICont

ASP.NET MVC学习之过滤器篇(2)

下面我们继续之前的ASP.NET MVC学习之过滤器篇(1)进行学习. 3.动作过滤器 顾名思义,这个过滤器就是在动作方法调用前与调用后响应的.我们可以在调用前更改实际调用的动作,也可以在动作调用完成之后更改最终返回的结果,当然很多人一定不太明白这个到底可以干什么, 下面我们举一个比较实际的例子: 相信理解过网站的安全的一定知道跨站请求(CSRF具体可以自行百度,这里我就不去解释了),当然也有解决方案,那就是给页面中增加一个识别码,当页面进行POST请求时,首先判断识别码是否正确, 如果正确则继

(转)ASP.NET MVC 学习第一天

天道酬勤0322 博客园 | 首页 | 发新随笔 | 发新文章 | 联系 | 订阅  | 管理 随笔:10 文章:0 评论:9 引用:0 ASP.NET MVC 学习第一天 今天开始第一天学习asp.net mvc,写的不是很好,高手不要喷,希望大家能一起进步学习. 好了,开始学习 新建项目,选择mvc 4应用程序 接下来选择基本,视图引擎当然要选择Razor,如果在选择aspx那我们就没必要用mvc喽 在这里我们简单说一下,项目模板如果选择空,这就需要我们自己进行导入很多文件,而选择基本vs会