5.显示学员列表

效果

数据表

5.1 首先,在文件夹Models新建一个新建项(W),选择ADO.NET 实体数据模型 (SingleTest.edmx)

5.2 建一个控制器,StudentsController.cs

StudentsController.cs
StudentsController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace P01FirstMVC.Controllers
{
public class StudentsController : Controller
{
//创建数据上下文
Models.SingleTestEntities db = new Models.SingleTestEntities(); /// <summary>
/// 显示学院列表
/// </summary>
/// <returns></returns>
public ActionResult Index()
{
//1.查询学员数据(EF查询到实体其实是 实体代理类对象(包装类对象))
List<Models.Student> list = (from s in db.Students.Include("class") where s.Isdel == 1 select s).ToList();
//2.加载视图,并将数据传给视图
return View(list);
} }
}

5.3 再生成一个视图

Views\Students\Index.cshtml
Views\Students\Index.cshtml

@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<style>
#tbList{
border:1px solid #0094ff;
width:400px;
margin:20px auto;
border-collapse:collapse;
}
#tbList th, td {
border: 1px solid #0094ff;
padding:2px;
}
</style>
</head>
<body>
<div>
<table id="tbList">
<tbody>
<tr>
<th>ID</th>
<th>姓名</th>
<th>班级</th>
<th>性别</th>
</tr>
<!--视图包含一个 Model属性 可以通过控制器 Action 方法里的 View(modeldata)赋值-->
@foreach (P01FirstMVC.Models.Student stu in Model as List<P01FirstMVC.Models.Student>)
{
<tr>
<th>@stu.StudentID</th>
<th>@stu.Name</th>
<th>@stu.Class.CName</th>
<th>@stu.Gender</th>
</tr>
}
</tbody>
</table>
</div>
</body>
</html>

6.删除

6.1.修改上图

@foreach (P01FirstMVC.Models.Student stu in Model as List<P01FirstMVC.Models.Student>)
{
<tr>
<th>@stu.StudentID</th>
<th>@stu.Name</th>
<th>@stu.Class.CName</th>
<th>@stu.Gender</th>
<th><a href="/students/del/@stu.StudentID">删</a></th>
</tr>
}

6.2.然后再在控制器添加删除方法Del()


StudentsController.cs 2.0 删除
StudentsController.cs 2.0 删除

        #region 2.0 删除 指定学员数据
/// <summary>
/// 删除 指定学员数据
/// </summary>
/// <returns></returns>
public void Del(int id)
{
//2.1 检查id是否存在
//2.2 执行删除
Models.Student stu = new Models.Student() { StudentID = id }; /*等价于下面的entry方法
db.Students.Attach(stu);
db.Students.Remove(stu);
*/
DbEntityEntry<Models.Student> entry = db.Entry<Models.Student>(stu);
entry.State = EntityState.Deleted; int reslut = db.SaveChanges();
//return JavaScript("alert('删除成功!');window.location='/Students/Index';");
//return Redirect("/Students/Index");//重定向方法,相当于Response.Redirect("/Students/Index");
Response.Write("<script>alert('删除成功!');window.location='/Students/Index';</script>");
}
#endregion

7.修改

\Views\Students\Modify.cshtml
\Views\Students\Modify.cshtml

@{
Layout = null;
}
@using P01FirstMVC.Models;
@model P01FirstMVC.Models.Student
<!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Modify</title>
</head>
<body>
<div>
<form action="/Students/Modify" method="post">
<input type="hidden" name="StudentID" value="@Model.StudentID" />
<table>
<tbody>
<tr>
<td>姓名:</td>
<td><input name="Name" value="@Model.Name" /></td>
</tr>
<tr>
<td>班级:</td>
<td>
@*方法二*@
@Html.DropDownList("Cid", ViewBag.classes as IEnumerable<SelectListItem>) @*方法一:查询班级下拉列表
<select name="Cid">
@foreach (Class item in @ViewBag.classes as List<Class>)
{
//表classes的cid与表student表的cid相等
if (item.Cid==Model.Cid)
{
<option selected value="@item.Cid">@item.CName</option>
}
else
{
<option value="@item.Cid">@item.CName</option>
} }
</select>*@
</td>
</tr>
</tbody>
</table>
<input type="submit" value="OK" />
</form>
</div>
</body>
</html>
StudentsController.cs 3.0 修改
StudentsController.cs 3.0 修改

 #region 3.0 修改
/// <summary>
/// 修改
/// </summary>
/// <returns></returns>
public ActionResult Modify(int id)
{
//3.1.检查id是否存在 //3.2.根据id查询数据
Models.Student stu = (from s in db.Students where s.Isdel == 1 && s.StudentID == id select s).FirstOrDefault(); //3.3.方法一:查询班级下拉列表
//List<Models.Class> classes = (from p in db.Classes where p.CIsdel == "0" select p).ToList();
//ViewBag.classes = classes; //3.3.方法二:查询班级数据并转成下拉框选项 集合
//**************linq查询不识别方法“System.String ToString(Int32)”,因此该方法无法转换为存储表达式。
//*List<SelectListItem> selectClasses = (from p in db.Classes
//* where p.CIsdel == "0"
//* select new SelectListItem()
//* {
//* Text = p.CName,
//* Value = p.Cid.ToString(),
//* Selected = (stu.Cid == p.Cid)
//* }).ToList();
//******************************************************************************
List<SelectListItem> cals = db.Classes.Where(p => p.CIsdel == "0").ToList() //选查询数据转成 实体List集合
.Select(p => new SelectListItem()
{
Text = p.CName,
Value = p.Cid.ToString(), //先转成List集合,才能使用ToString()
Selected = (stu.Cid == p.Cid)
}).ToList(); //将实体集合转成SelectListItem集合
ViewBag.classes = cals; //3.4.加载视图 并传递要修改的值
return View(stu); } //[HttpPost]
[HttpPost]
public ActionResult Modify(Models.Student model)
{
DbEntityEntry entry = db.Entry<Models.Student>(model);
entry.State = EntityState.Unchanged;
entry.Property("Name").IsModified = true;
entry.Property("Cid").IsModified = true;
db.SaveChanges();
return Redirect("/Students/index");
}
#endregion

MVC – 4.mvc初体验(2)的更多相关文章

  1. MVC + Vue.js 初体验(实现表单操作)

    Vuejs http://cn.vuejs.org/ Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的 ...

  2. Spring MVC + Security 4 初体验(Java配置版)

    spring Version = 4.3.6.RELEASE springSecurityVersion = 4.2.1.RELEASE Gradle 3.0 + Eclipse Neno(4.6) ...

  3. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  4. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  5. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

  6. 百度EChart3初体验

    由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...

  7. SignalR初体验

    简介 ASP .NET SignalR[1]  是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.什么是实时通信的Web呢?就是让客户端(Web页面)和服务器端可以 ...

  8. 基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    基于 Webpack & Vue & Vue-Router 的 SPA 初体验 本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com ...

  9. 蚂蚁 RPC 框架 SOFA-RPC 初体验

    前言 最近蚂蚁金服开源了分布式框架 SOFA,楼主写了一个 demo,体验了一下 SOFA 的功能,SOFA 完全兼容 SpringBoot(当然 Dubbo 也是可以兼容的). 项目地址:Alipa ...

  10. flutter初体验

    flutter初体验 和flutter斗争了两个周末,基本弄清楚了这个玩意的布局和一些常用组件了. 在flutter里面,所有东西都是组件Widget.我们像拼接积木一样拼接Widget,拼接的关键词 ...

随机推荐

  1. jqury中关于ajax的几个常用的函数

    一: AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 什么是 AJAX ? AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术 ...

  2. Hbase(二)hbase建表

    一.建表高级属性 下面几个 shell 命令在 hbase 操作中可以起到很到的作用,且主要体现在建表的过程中,看 下面几个 create 属性 1.bloomfilter 布隆过滤器 默认是 NON ...

  3. bzoj2213: [Poi2011]Difference(思维题)

       今天颓了一天T T 这题有两种写法... ①预处理出每种字符在原字符串中的位置,枚举两种字符作为最大值和最小值,把这两种字符的坐标归并排序,把最大值设为1,最小值设为-1,求最大子段和.注意因为 ...

  4. [知识点]C++中STL容器之set

    零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 继上期的vector之后,我们又迎来了另一个类数组的STL容器——set. 二.用途与特性 set,顾名思义,集合 ...

  5. 【loj6198】谢特

    Portal -->loj6198 Solution ​ (为什么感觉loj上面这几道后缀数组的题..套路都是一样的啊qwq) ​ 同样也是..考虑某个区间\(height[i]\)的最小值的贡 ...

  6. PostgreSQL 传统 hash 分区方法和性能

    背景 除了传统的基于trigger和rule的分区,PostgreSQL 10开始已经内置了分区功能(目前仅支持list和range),使用pg_pathman则支持hash分区. 从性能角度,目前最 ...

  7. python学习笔记(七) 类和pygame实现打飞机游戏

    python中类声明如下: class Student(object): def __init__(self, name, score): self.name = name self.score = ...

  8. mysql 自动记录数据最后修改时间

    原文 -- mysql ,还真有这样的说法: mysql> create table test( ), -> uptime timestamp on update current_time ...

  9. NDK编译时两 .so之间调用问题

    Android C++(NDK)项目需要调用别人的代码,因此将其编译成了.so库,而自己的代码也编成了一个.so库. 结果编译成功,但是在运行时自己的.so调用别人的.so会失败,提示说没有正确传入参 ...

  10. redis服务启动脚本

    /etc/rc.d/init.d/redis #!/bin/sh# chkconfig: 2345 80 90 # description: Start and Stop redis REDISPOR ...