03-23 MVC框架(以查询、删除为例)
1、MVC的定义:
MVC(Model-View-Controller,模型-视图-控制器)是用于将应用程序粉好吃呢过如下3个主要方面的体系结构模式:
模型(Model):一组类和业务规则,类用于描述正在处理的数据,业务规则用于说明如何修改和操纵这些数据。
视图(View):应用程序的用户界面(UI)。
控制器(Controller):一组类,用于处理来自用户,整个应用程序流以及特定应用程序逻辑的通信。运行时,默认运行HomeControllers.
该模式常用于Web编程。
2、约定胜于配置
本质是指:当我们知道如何创建应用程序,把该经验应用到架构中,这样就不用在配置所有的内容了。
查看是应用程序运行的如下3个核心目录,我们可以看到这个思想在ASP.NETMVC中的应用情况:
(1)Controllers控制器:
(2)Models
(3)Views
3、思路:
首先,客户面对的是Control层
每个控制器对应一个文件夹,每个视图对应一个页面
控制器调用模板,再返回到控制器
4、各个写法的区别:
<%# Eval("数据绑定的一列数据") %>
<%=动态数据(一条数据) %>
<% 输入某一段代码%>
不需要再web.config文件中设置这些文件夹的名称——只需要按照约定将它们放在期望的位置即可。
第一步:新建——项目:选择“框架环境4.5版本”
项目建立完成后,就会发现项目资源管理器中出现:
第二步:Controllers右键,添加“控制器类”,也可以使用快捷键(Ctrl+M,Ctrl+C),
控制器名称可以更改,但Controller不可以更改(约定胜于配置),选择空模板(建议使用)。
第三步:在Models层添加类(写增删改查方法)和Linq to SQL类
第四步:Models层(数据访问层):
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace MvcApplication1.Models { public partial class bumen { private DataClasses1DataContext _Context = new DataClasses1DataContext(); //查询数据库表 public List<bumen> Select() { // List<bumen> list = new List<bumen>(); var query = _Context.bumen.ToList(); return query.ToList(); } //按主键查询 public bumen Select(int id) { // List<bumen> list = new List<bumen>(); var query = _Context.bumen.Where(p=>p.code==id); if (query.Count() > 0) { return query.First(); } else { return null; } } //按照主键删除 public void Delete(int id) { var query = _Context.bumen.Where(p=>p.code==id); if(query.Count()>0) { bumen bm = query.First(); _Context.bumen.DeleteOnSubmit(bm); _Context.SubmitChanges(); } } } }
using MvcApplication1.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcApplication1.Controllers { //MVC默认执行Home控制器 public class HomeController : Controller { //控制器默认先走Home,而不是其他控制器 //约定优于配置 public ActionResult Index() { //把数据从Model层找出 //需要引用Models层的命名空间 List<bumen> list = new bumen().Select(); //再把数据传到view ViewData["list"] = list; //返回view给客户 return View(); } public ActionResult Delete(int id) { new bumen().Delete(id); return RedirectToAction("Index"); } } }
第六步:Views层(界面模板):
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> <%@import Namespace="MvcApplication1.Models" %>>//引用Models层的命名空间 <!DOCTYPE html> <html> <head runat="server"> <meta name="viewport" content="width=device-width" /> <title>Index</title> <style type="text/css">//设置表头和行数据的格式 .head { background-color:navy; color:white; font-weight:bold; text-align:center; } .item { background-color:#e0e0e0; color:black; text-align:center; } </style> </head> <body> <div> <table width="100%" border="0" cellpadding="5" cellspacing="1" bgcolor="black"> <%-- 表头 --%> <tr class="head"> <td>姓名</td> <td>职能</td> <td>CEO</td> <td>操作</td> </tr> <%-- 行数据 --%> <% List<bumen> list = ViewData["list"] as List<bumen>; foreach(bumen data in list) { %> <tr class="head"> <td><%=data.name %></td> <td><%=data.zhineng %></td> <td><%=data.ceo %></td> <td><a href="Home/Delete?id=<%=data.code %>">删除</a></td> </tr> <%} %> </table> </div> </body> </html>
查询显示:
删除操作(一行):【以管理部--负责运营管理和调控--红烧肉】为例:
注意:Controllers默认执行HomeController,如果当前执行的不是HomeController,而是直接DemoController,那么浏览器会直接弹出:
这时,需要将Demo文件夹及Demo下的Index(Action)写上,然后跳转页面即可。