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. Hystrix : 解决请求会被拒绝和抛出异常并且fallback不会被调用的问题

    启动脚本增加参数:-Dserver.tomcat.max-http-header-size=102400 增大Hystrix,ribbon的各项参数; hystrix: threadpool: def ...

  2. Linux(六)shell操作实用技巧

    一.shell操作日期时间 linux 系统为我们提供了一个命令 date,专门用来显示或者设置系统日期时间的.      语法格式为:      date [OPTION]... [+FORMAT] ...

  3. SAS数据步与过程步,数据步语句

    SAS数据步与过程步,数据步语句http://www.biostatistic.net/thread-2045-1-1.html  ---转载---原文作者:biostar(出处: 生物统计家园) 数 ...

  4. dom4j之selectSingleNode方法

    dom4j之selectSingleNode方法 2017年12月18日 15:10:18 xclsky1120 阅读数:2043   版权声明:本文为博主原创文章,未经博主允许不得转载. https ...

  5. duilib 修复Text控件无法设置宽度的bug,增加自动加算宽度的属性

    转载请说明原出处,谢谢~~: 今天有朋友反映CTextUI控件无法设置宽度,于是修复了这个bug,顺便给Text控件增加了一个自动计算宽度的属性,描述如下 <Attribute name=&qu ...

  6. 新生代Eden与两个Survivor区的解释

    文章出处:http://ifeve.com/jvm-yong-generation/ 聊聊JVM的年轻代 1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分 ...

  7. Vue DatePicker和不可用

    input控件可以直接设置disabled为不可用状态: DatePicker要想不可编辑,设置readonly属性即可 <DatePicker type="date" v- ...

  8. HTML不常用的表单属性-fieldset

    这是代码 这是生成的样子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...

  9. java项目转换依赖等问题

    最近接手了一个原始的java项目,其实很久没有做了,自从两年前用maven,建立web项目,java project基本上就没有弄个,突然的接手,发现自己好多不足,可能对于一开始就做这样的容易,但是对 ...

  10. 什么是Qt Widget?

    Qt帮助文档如此解释: The user interface contains visual elements that are called widgets in Qt. Examples of w ...