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. https的通信过程

    https的特点 1. https有 握手阶段 和 请求阶段2. 握手阶段 使用 非对称加密算法 请求阶段 使用 对称加密算法3. 保证数据的完整性使用数字签名4. 握手阶段有两组非对称加密,数字证书 ...

  2. [HEOI2015]公约数数列

    不错的分块题 gcd和xor其实并没有联系 这里,xor的按位性质没有半点卵用 gcd的性质却很关键: 一个数组,前缀gcd最多logn个不同的 gcd不太多,(暴力的基础) 所有考虑分块. 分块,每 ...

  3. LOJ #6037.「雅礼集训 2017 Day4」猜数列 状压dp

    这个题的搜索可以打到48分…… #include <cstdio> #include <cstring> #include <algorithm> ; bool m ...

  4. Codeforces 395 D.Pair of Numbers

    D. Pair of Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. jvm容器的关系

    jvm实例,tomcat容器,spring容器,在内存中的关系5 1.一个java项目对应一个jvm 吗? 2.tomcat里面加载多个java项目 ,是不是用了一个jvm? 3.java项目中的sp ...

  6. python学习(十一)测试和调试

    最近学习了python的错误处理和几种测试方法 1 try except 可以通过try except方式捕捉异常 try: print('try...') r = 10/0 print('resul ...

  7. std::sort运行出core(segment fault)

    http://note.youdao.com/noteshare?id=6aae09345e85ab55fe24ac959118a747

  8. lightoj 1020 (博弈水题)

    lightoj 1020 A Childhood Game 链接:http://lightoj.com/volume_showproblem.php?problem=1020 题意:一堆石子有 m 个 ...

  9. Bootstrapping算法

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  10. CSS文字溢出部分自动用"..."代替

    CSS文字溢出部分自动用"..."代替 如html部分: <h4><马尔代夫双鱼岛Olhuveli4 晚6 日自助游></h4> <p&g ...