MVC – 4.mvc初体验(2)
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)的更多相关文章
- MVC + Vue.js 初体验(实现表单操作)
Vuejs http://cn.vuejs.org/ Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的 ...
- Spring MVC + Security 4 初体验(Java配置版)
spring Version = 4.3.6.RELEASE springSecurityVersion = 4.2.1.RELEASE Gradle 3.0 + Eclipse Neno(4.6) ...
- Spring之初体验
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
- 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...
- 百度EChart3初体验
由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...
- SignalR初体验
简介 ASP .NET SignalR[1] 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.什么是实时通信的Web呢?就是让客户端(Web页面)和服务器端可以 ...
- 基于 Webpack & Vue & Vue-Router 的 SPA 初体验
基于 Webpack & Vue & Vue-Router 的 SPA 初体验 本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com ...
- 蚂蚁 RPC 框架 SOFA-RPC 初体验
前言 最近蚂蚁金服开源了分布式框架 SOFA,楼主写了一个 demo,体验了一下 SOFA 的功能,SOFA 完全兼容 SpringBoot(当然 Dubbo 也是可以兼容的). 项目地址:Alipa ...
- flutter初体验
flutter初体验 和flutter斗争了两个周末,基本弄清楚了这个玩意的布局和一些常用组件了. 在flutter里面,所有东西都是组件Widget.我们像拼接积木一样拼接Widget,拼接的关键词 ...
随机推荐
- iOS 开发笔记 -- 各种细枝末节的知识(水滴石穿)
在此总结整理,遇到的各种的小问题: 1.通过从字典(数组)中取出的NSString的length==0 作为if的判断条件导致的carsh: 由于在字典中通过Key取出值之后直接做了length相关操 ...
- Panabit安装配置笔记
最近研究了linux下基于FREEBSD的开源流控软件Panabit,感觉功能还不错,单位公司如果经费不足的朋友需要做内网流控可以使用这款软件,最新免费版ISO镜像仅支持网桥模式和旁路模式,256个并 ...
- 2.实现Express中间件
Express提供的大部分功能都是通过中间件函数完成,这些中间件函数在Node.js收到 请求的时点 和 发送响应的时点 执行 connect模块提供了中间件框剪 方便在全局或路径级别或为单个路由插入 ...
- C#之系统自带保存属性
源代码下载链接 程序开发很多时候需要根据运行环境做不通的参数配置,通过写ini之类的文本文件是一种方法,但这种方法也同时会把数据暴露 Winform开发中可以将需要配置的字段属性保存到程序中(其实也是 ...
- mysql性能优化学习笔记-存储引擎
mysql体系架构 客户端(java.php.python等) mysql服务层(连接管理器.查询解析器.查询优化器.查询缓存) mysql存储引擎(innodb.myisam等) 存储引擎针对表而言 ...
- NGUI研究院之在Unity中使用贝塞尔曲线(六)[转]
鼎鼎大名的贝塞尔曲线相信大家都耳熟能详.这两天因为工作的原因需要将贝塞尔曲线加在工程中,那么MOMO迅速的研究了一下成果就分享给大家了哦.贝塞尔曲线的原理是由两个点构成的任意角度的曲线,这两个点一个是 ...
- ffmpeg-20160815-bin.7z
ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...
- Divide and conquer:Showstopper(POJ 3484)
Showstopper 题目大意:数据挖掘是一项很困难的事情,现在要你在一大堆数据中找出某个数重复奇数次的数(有且仅有一个),而且要你找出重复的次数. 其实我一开始是没读懂题意的...主要是我理解错o ...
- Divide and conquer:Telephone Lines(POJ 3662)
电话线 题目大意:一堆电话线要你接,现在有N个接口,总线已经在1端,要你想办法接到N端去,电话公司发好心免费送你几段不用拉网线,剩下的费用等于剩余最长电话线的长度,要你求出最小的费用. 这一看又是一个 ...
- codeforces 496B. Secret Combination 解题报告
题目链接:http://codeforces.com/problemset/problem/496/B 题目意思:给出 n 位数你,有两种操作:1.将每一位数字加一(当某一位 > 9 时只保存个 ...