zoukankan      html  css  js  c++  java
  • MVC增删查改,从数据库到后台,到前端,整个复习一下

    就当是记笔记吧,这里,就不讲什么版式了,首先上数据库脚本,这个是我这次练习用到的数据库脚本:

    USE [DB_USERS]
    GO
    
    /****** Object:  Table [dbo].[Student]    Script Date: 10/31/2015 16:44:06 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    SET ANSI_PADDING ON
    GO
    
    CREATE TABLE [dbo].[Student](
        [s_ID] [INT] IDENTITY(1,1) NOT NULL,
        [s_Name] [NVARCHAR](10) NULL,
        [s_Sex] [CHAR](2) NULL,
        [s_Age] [INT] NULL,
        [c_ID] [INT] NOT NULL,
     CONSTRAINT [PK__Studnet__2F3DA3BC267ABA7A] PRIMARY KEY CLUSTERED 
    (
        [s_ID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO
    
    SET ANSI_PADDING OFF
    GO
    
    ALTER TABLE [dbo].[Student]  WITH CHECK ADD FOREIGN KEY([c_ID])
    REFERENCES [dbo].[Classes] ([c_ID])
    GO
    USE [DB_USERS]
    GO
    
    /****** Object:  Table [dbo].[Classes]    Script Date: 10/31/2015 16:44:51 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE TABLE [dbo].[Classes](
        [c_ID] [INT] NOT NULL,
        [c_Name] [NVARCHAR](50) NULL,
    PRIMARY KEY CLUSTERED 
    (
        [c_ID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO

    下面就是后台的代码了:

      1 using MVCFirstApp.Models;
      2 using System;
      3 using System.Collections.Generic;
      4 using System.Data;
      5 using System.Data.Entity.Infrastructure;
      6 using System.Linq;
      7 using System.Web;
      8 using System.Web.Mvc;
      9 
     10 namespace MVCFirstApp.Controllers
     11 {
     12     public class StudentController : Controller
     13     {
     14 
     15         public StudentController() 
     16         
     17         { 
     18         //关闭实体验证
     19             db.Configuration.ValidateOnSaveEnabled = false;
     20         }
     21         DB_USERSEntities db = new DB_USERSEntities();
     22         //
     23         // GET: /Student/
     24 
     25         public ActionResult Index()
     26         {
     27             
     28             List<Student> list = db.Student.Include("Classes").ToList();
     29            
     30             return View(list);    //将list对象传给视图里的Model属性
     31         }
     32 
     33         /// <summary>
     34         /// 
     35         /// </summary>
     36         /// <returns></returns>
     37         //public ActionResult Delete(int id)  //这里的id要和路由里面的id参数一样,不区分大小写
     38         //{
     39 
     40         //    Student stu = new Student() { s_ID = id };
     41 
     42         //    #region 删除的方法之一
     43         //    //删除的方法之一
     44         //    //加入到数据上下文中
     45         //    //使用Remove方法删除。必须先Attach
     46           
     47         //    //db.Student.Attach(stu);
     48         //    //db.Student.Remove(stu);
     49 
     50 
     51         //    //db.SaveChanges();   //保存到数据库
     52         //    #endregion
     53 
     54         //    #region 删除的方法之二
     55         //    //用过上下文对象的Entity方法,来把对象加入到EF中
     56         //    DbEntityEntry entry = db.Entry<Student>(stu);
     57 
     58         //    entry.State = EntityState.Deleted;
     59         //    db.SaveChanges();//保存到数据库
     60 
     61         //    #endregion
     62 
     63         //    // return Redirect("/Student/Index");
     64 
     65         //    return RedirectToAction("index");  //删除的时候,调用重定向方法,有一个缺点,就是不知道是删除成功还是失败
     66 
     67         //    //删除的时候,我们还可以使用js代码,向用户返回删除成功还是失败
     68         //    //Response.Write("<script></script>");
     69         
     70         //}
     71 
     72 
     73         /// <summary>
     74         /// 删除
     75         /// </summary>
     76         /// <param name="id"></param>
     77         public void Delete(int id)  //这里的id参数必须要和路由里面的id参数一样,才可以,将参数id传到控制器方法,不过不区分大小写,即写ID也行
     78         {
     79 
     80             Student stu = new Student() { s_ID = id };
     81 
     82             #region 删除的方法之一
     83             //删除的方法之一
     84             //加入到数据上下文中
     85             //使用Remove方法删除。必须先Attach
     86 
     87             //db.Student.Attach(stu);
     88             //db.Student.Remove(stu);
     89 
     90 
     91             //db.SaveChanges();   //保存到数据库
     92             #endregion
     93 
     94             #region 删除的方法之二
     95             //用过上下文对象的Entity方法,来把对象加入到EF中
     96             DbEntityEntry entry = db.Entry<Student>(stu);
     97 
     98             entry.State = EntityState.Deleted;
     99             db.SaveChanges();//保存到数据库
    100 
    101             #endregion
    102 
    103             // return Redirect("/Student/Index");
    104 
    105             // return RedirectToAction("index");  //删除的时候,调用重定向方法,有一个缺点,就是不知道是删除成功还是失败
    106 
    107             //删除的时候,我们还可以使用js代码,向用户返回删除成功还是失败
    108             //window.location.href重新定向到新地址,不打开新窗口
    109             Response.Write("<script>alert('删除成功~~~');window.location.href='/Student/Index';</script>");
    110 
    111         }
    112 
    113         /// <summary>
    114         /// 修改
    115         /// </summary>
    116         /// <param name="id"></param>
    117         /// <returns></returns>
    118         public ActionResult Modify(int id)
    119         {
    120             //根据ID查询Student表中的数据
    121             Student stu = (from s in db.Student where s.s_ID == id select s).FirstOrDefault();
    122 
    123 
    124             //原始的方式,做下拉框
    125             //查询班级集合数据,并做成下拉框
    126             //List<Classes> listClass = db.Classes.ToList();
    127             //ViewBag.ListClassData = listClass;
    128 
    129 
    130             //LINQ to Entities 不识别方法“System.String ToString()”
    131             //List<SelectListItem> listClass = (from c in db.Classes
    132             //                select new SelectListItem() { Text = c.c_Name, Value = c.c_ID.ToString(), Selected =  (stu.c_ID==c.c_ID) }).ToList();
    133 
    134             var listClass = db.Classes.ToList().Select(c => new SelectListItem() { Text = c.c_Name, Value = c.c_ID.ToString(), Selected = (stu.c_ID == c.c_ID) });
    135 
    136             //这里就有个疑问了,我们已经传了Student到View方法中,班级的数据该怎么传递到后台页面?
    137 
    138             //PS:控制器上的Action方法,向视图传递数据,除了通过View()方法,将数据传递到视图中的Model属性之外,
    139             //还有三种方式,Viewbag,ViewData,Tempdata
    140 
    141             ViewBag.ListClassData = listClass;
    142 
    143             return View(stu);  //加载视图,并传递要修改的数据
    144         }
    145 
    146         [HttpPost]
    147         public ActionResult Modify(Student model)
    148         {
    149             //将要修改的值,放到数据上下文中
    150            DbEntityEntry entry= db.Entry<Student>(model);
    151            entry.State = EntityState.Unchanged;
    152            entry.Property("s_Name").IsModified = true;
    153            entry.Property("c_ID").IsModified = true;
    154            db.SaveChanges(); //将修改之后的值保存到数据库中
    155            return Redirect("Index");
    156         }
    157 
    158         /// <summary>
    159         /// 添加
    160         /// </summary>
    161         /// <returns></returns>
    162         public ActionResult Add()
    163         {
    164             var listClass = db.Classes.ToList().Select(c => new SelectListItem() {Text=c.c_Name,Value=c.c_ID.ToString(),Selected=true });
    165 
    166             ViewBag.ListClass = listClass;
    167             return View();
    168         }
    169 
    170         [HttpPost]
    171         public ActionResult Add(Student entity)
    172         {
    173           DbEntityEntry entry=  db.Entry<Student>(entity);
    174           entry.State = EntityState.Added;
    175           db.SaveChanges();
    176           return RedirectToAction("index");
    177         }
    178     }
    179 }
    后台代码

    然后就是页面的代码了:

    @model MVCFirstApp.Models.Student
    @{
        Layout = null;
    }
    @using MVCFirstApp.Models;
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Add</title>
    </head>
    <body>
        <form action="~/Student/Add" method="post">
            <input type="submit" value="添加" />
            <table>
                <tr>
                    <td>姓名:</td>
                    <td>@Html.EditorFor(model=>model.s_Name)</td>
                </tr>
    
                <tr>
                    <td>性别:</td>
                    <td>男:@Html.RadioButtonFor(model=>model.s_Sex,"")女:@Html.RadioButtonFor(model=>model.s_Sex,"")</td>
                </tr>
    
                <tr>
                    <td>年龄:</td>
                    <td>@Html.EditorFor(model => model.s_Age)</td>
                </tr>
    
                <tr>
                    <td>班级:</td>
                    <td>@Html.DropDownList("C_ID", @ViewBag.ListClass as IEnumerable<SelectListItem>)</td>
                </tr>
    
    
            </table>
        </form>
    </body>
    </html>
    添加页面
    @{
        Layout = null;
    }
    
    @using MVCFirstApp.Models;
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Index</title>
        <link href="~/Scripts/My.css" rel="stylesheet" />
    </head>
    <body>
       <table class="mytable">
           <tr>
               <th>学号</th>
               <th>姓名</th>
               <th>性别</th>
               <th>年龄</th>
               <th>班级名</th>
               <th>操作</th>
           </tr>
           <!--视图里面包含一个Model属性,可以通过Action方法中的View方法来赋值-->
           @foreach (Student stu in Model)
           { 
           <tr>
               <td>@stu.s_ID</td>
               <td>@stu.s_Name</td>
               <td>@stu.s_Sex</td>
               <td>@stu.s_Age</td>
               <td>@stu.Classes.c_Name</td>
               <!--传参数-->
               <td>@Html.ActionLink("修改", "Modify", new { id=@stu.s_ID})@Html.ActionLink("删除", "Delete", new { id=@stu.s_ID})@Html.ActionLink("增加", "Add")</td>
               
           </tr>
           }
       </table>
    </body>
    </html>
    主页面(列表页面)
    @model MVCFirstApp.Models.Student   
               @*指定了model类型的视图就叫强类型视图, 好处:VS可以推断出model的类型,从而提供提示,model本来是动态的类型,使用的时候,一般都要转类型,使用as来转*@
    
    @{
        Layout = null;
    }
    @using MVCFirstApp.Models;
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Modify</title>
    </head>
    <body>
        <form method="post" action="/Student/Modify">
    
            @*添加一个隐藏域*@   @*不添加隐藏域,点击修改的时候,ID的属性传不到Action方法*@
            @*修改,必须要传主键过去,SID必须传,所以隐藏域不能少*@
            <input type="hidden" name="s_ID" value="@Model.s_ID"><table>
                <tr>
                    <td>姓名:</td>
                    @*name属性的值,要和value里面绑定的属性名字一样,这样在修改的时候,才可以把参数传递到Action方法*@
                    <td><input type="text" name="s_Name" value="@Model.s_Name" /></td> @*文本框的name属性也使用和Model.s_Name一样,模型绑定*@
                    <td>班级:</td>   @*班级要生成下拉框,要有班级数据*@
                    <td>
    
                        @*dropDownlist第一个参数的字段,必须要和数据库中的字段一样,这里是将班级名称列出来,*@
                        @Html.DropDownList("c_ID", ViewBag.ListClassData as IEnumerable<SelectListItem>)
    
                @*ViewBag是动态的类型,使用的时候,需要转一下类型*@
                @*下面这个是生成下拉框最原始的方式,有个不方便,就是要选中默认值*@
                @*<select name="c_ID">
                        @foreach (Classes c in @ViewBag.ListClassData as List<Classes>)
                        {
                            //如果集合中的班级号,和Model里面的班级号相等,就在option标签,加上Selected
                            if (c.c_ID == Model.c_ID)
                            {
                                <option value="@c.c_ID" selected>@c.c_Name</option>
                            }
                            else
                            {
                                <option value="@c.c_ID">@c.c_Name</option>
                            }
                        }
                    </select>*@
            </td>
                    <td>性别:</td>
                    @*name属性的值,要和value里面绑定的属性名字一样,这样在修改的时候,才可以把参数传递到Action Post方式的方法*@
                    <td><input type="text" name="s_Sex" value="@Model.s_Sex" /></td>
                    <td>年龄:</td>
                    <td><input type="text" name="s_Age" value="@Model.s_Age" /></td>
                    <td><input type="submit" value="确定" /></td>
        </tr>
    </table>
    </form>
    </body>
    </html>
    修改页面

    好了,就这么多了。

  • 相关阅读:
    746. 使用最小花费爬楼梯(动态规划题)
    91.解码方法(动态规划)
    198/213 打家劫舍(动态规划)
    5. 最长回文子串 (从今天开始刷动态规划50题)
    POJ 2142
    HDU 4686
    HDU 4767
    HDU 1757
    POJ 3613
    HDU 2157
  • 原文地址:https://www.cnblogs.com/caofangsheng/p/4926043.html
Copyright © 2011-2022 走看看