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. open_basedir restriction in effect的错误及其解决办法

    问题是出现在了PHP.INI上面了   原因是php.ini里设置了     opendir=/var/web/w0895/:/tmp:/usr/lib/php  解答: 其实open_basedir ...

  2. Atom实用配置插件for C++

    autocomplete-clang  自动补全 autocomplete for C/C++/ObjC using clang autocomplete-python 自动补全 Python pac ...

  3. 《剑指offer》— JavaScript(5)用两个栈实现队列

    用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 实现代码 function Stack(){ var item = []; this. ...

  4. jsp 的 4 种基本语法

    1.JSP 注释 2.JSP 声明 3.JSP 表达式 4.JSP 脚本 JSP 注释: 注释格式: <%-- 注释内容 --%> 需要注意的是,JSP 的注释不会输出到 HTML 中. ...

  5. 使用无线网卡搭建虚拟wifi

    1.首先以管理员身份运行命令提示符 开始->搜索框输入cmd,出来的cmd.exe上右键管理员身份运行,或者win+R打开运行提示框,输入cmd并回车. 2.设置“虚拟Wifi网卡”模式 敲入命 ...

  6. 题解 P1682 【过家家】

    P1682 过家家 题目描述 有2n个小学生来玩过家家游戏,其中有n个男生,编号为1到n,另外n个女生,编号也是1到n.每一个女生可以先选择一个和她不吵嘴的男生来玩,除此之外,如果编号为X的女生的朋友 ...

  7. Tensorflow BatchNormalization详解:2_使用tf.layers高级函数来构建神经网络

    Batch Normalization: 使用tf.layers高级函数来构建神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴恩达deeplearningai课程 课程笔 ...

  8. [Ctsc2014]企鹅QQ

    3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description P ...

  9. [洛谷P2745] [USACO5.3]窗体面积Window Area

    洛谷题目链接:[USACO5.3]窗体面积Window Area 题目描述 你刚刚接手一项窗体界面工程.窗体界面还算简单,而且幸运的是,你不必显示实际的窗体.有 5 种基本操作: 创建一个新窗体 将窗 ...

  10. [Luogu 1196] NOI2002 银河英雄传说

    [Luogu 1196] NOI2002 银河英雄传说 话说十六年前的 NOI 真简单... 我一开始还把题看错了- 题意:一群人,每个人各自成一队,每次命令让两队首位相接合成一队,每次询问问你某两个 ...