1. inetmgr 进入IIS
  2. ViewBag和ViewData在run-time的时候检查错误,View中的用法如下:
  3.    @*ViewBag传递的是动态对象*@
    @foreach (string item in ViewBag.listData)
    {
    <li>@item</li>
    }
    -----------------------------------------
    @*ViewData传递的是Object,所以要转换类型*@
    @foreach (string item in (List<string>)ViewData["Countries"])
    {
    <li>@item</li>
    }
  4. web.config中连接字符串名称需要和DbContext的类名称一致:
  5. public class EmployeeContext : DbContext
    {
    //定义对应到数据库表的对象集合
    public DbSet<Employee> Employees { get; set; }
    } <add name="EmployeeContext"
    providerName="System.Data.SqlClient"
    connectionString="Data Source=.;Initial Catalog=MVCSample;User ID= ;Password= ; " />
  6. Global.ashx 程序运行初始化配置:
  7. //DBFirst从数据读取数据,程序运行的时候EmployeeContext初始化为Null
    Database.SetInitializer<MVCBlog.Models.EmployeeContext>(null);
  8. View需要List数组对象,则强类型直接定义为IEnumerable; View中@using引用需要用到的类
  9. @model IEnumerable<MVCBlog.Models.Employee>
    @using MVCBlog.Models @{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
    } <h2>Index</h2> @*Controller 传递过来的是List对象,所以强类型定义为List<MVCBlog.Models.Employee>*@
    <ul>
    @foreach (Employee employee in @Model)
    {
    <li> @Html.ActionLink(employee.Name, "Details", new { @id = @employee.EmployeeID }) </li>
    }
    </ul>
  10. 业务逻辑层获取数据
  11. public IEnumerable<Employee> employees
    {
    get
    {
    string connectionString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString; List<Employee> employees = new List<Employee>(); using (SqlConnection con = new SqlConnection(connectionString))
    { SqlCommand cmd = new SqlCommand("sp_GetAllEmployee", con);
    cmd.CommandType = CommandType.StoredProcedure;
    con.Open();
    SqlDataReader sdr = cmd.ExecuteReader();
    while (sdr.Read())
    {
    Employee employee = new Employee();
    employee.EmployeeID = Convert.ToInt32(sdr["EmployeeID"]);
    employee.Name = sdr["Name"].ToString();
    employee.City = sdr["City"].ToString();
    employee.Gender = Convert.ToChar(sdr["Gender"]); employees.Add(employee);
    }
    return employees;
    }
    }
    }
  12. Razor中构建DropList:
  13.   @Html.DropDownList("Gender", new List<SelectListItem> {
    new SelectListItem { Text="男",Value="M"},
    new SelectListItem{ Text="女",Value="F"}
    }, "Select Gender", htmlAttributes: new { @class = "control-label col-md-2" })
    //或者是在Controller中构建SelectList后,Razor中Render
      ViewBag.DepartID = new SelectList(db.Department, "ID", "Name", employee.DepartID);    @Html.DropDownList("DepartID", null, "Select Department",htmlAttributes: new { @class = "form-control" })
  14. Procedure AddEmployee
  15. CREATE PROCEDURE sp_AddEmployee
    @Name nvarchar()=null,
    @Gender char()=null,
    @City nvarchar()=null,
    @DateOfBirth DateTime=null
    AS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    Insert Into Employee(Name,Gender,City,DateOfBirth)
    values(@Name,@Gender,@City,@DateOfBirth)
    END
    GO
  16. Controller搜集从View页面Post过来的数据,有三种方法:
    1. FormCollection 中包含了所有表单数据的键值对集合,通过FromCollection[Key] 访问到View Post 过来的 Data
      1.  [HttpPost]
        public ActionResult Create(FormCollection formCollection)
        {
        //foreach (string key in formCollection.AllKeys)
        //{
        // Response.Write(key + " ");
        // Response.Write(formCollection[key] + "<br/>");
        //} Employee employee = new Employee();
        employee.Name = formCollection["Name"];
        employee.Gender = Convert.ToChar(formCollection["Gender"]);
        employee.City = formCollection["City"];
        employee.DateOfBirth = Convert.ToDateTime(formCollection["DateOfBirth"]); EmployeeService employeeService = new EmployeeService();
        int numSucc = employeeService.AddEmployee(employee); if (numSucc > )
        {
        return RedirectToAction("Index");
        }
        else
        {
        return View();
        }
        }
    2. 直接以参数的形式接收数据
      1.  [HttpPost]
        public ActionResult Create(string Name,char Gender,string City,string DateOfBirth)
        {
        Employee employee = new Employee();
        employee.Name = Name;
        employee.Gender = Gender;
        employee.City = City;
        employee.DateOfBirth = Convert.ToDateTime(DateOfBirth); EmployeeService employeeService = new EmployeeService();
        int numSucc = employeeService.AddEmployee(employee); if (numSucc > )
        {
        return RedirectToAction("Index");
        }
        else
        {
        return View();
        }
        }
    3. Controller中UpdaetModel 更新 Model,获得提交过来的数据 
      1.  [HttpPost]
        [ActionName("Create")]
        public ActionResult Create_Post()
        {
        Employee employee = new Employee();
        UpdateModel<Employee>(employee); int numSucc = ;
        if (ModelState.IsValid)
        {
        EmployeeService employeeService = new EmployeeService();
        numSucc = employeeService.AddEmployee(employee);
        } if (numSucc > )
        {
        return RedirectToAction("Index");
        }
        else
        {
        return View();
        }
        }
  17. Service  新增数据服务:
    1. public int AddEmployee(Employee employee)
      {
      int numSucc = ;
      using (SqlConnection conn = new SqlConnection(connectionString))
      {
      SqlCommand cmd = new SqlCommand("sp_AddEmployee", conn);
      cmd.CommandType = CommandType.StoredProcedure;
      SqlParameter[] paras = new SqlParameter[] {
      new SqlParameter("Name",employee.Name),
      new SqlParameter("Gender",employee.Gender),
      new SqlParameter("City",employee.City),
      new SqlParameter("DateOfBirth",employee.DateOfBirth)
      };
      cmd.Parameters.AddRange(paras); conn.Open();
      numSucc = cmd.ExecuteNonQuery();
      } return numSucc;
      }
  18. 解决方案中的Nuget包管理器对解决方案中的Nuget包进行管理。
  19. Controller中模型绑定的两种方法:
    1,Bind 制定需要进行模型绑定传递到Controller中的数据。

    public ActionResult Edit_Post([Bind(Include = "Gender , City,DateOfBirth")]Employee employee)

    2,在UpdateModel中,传递需要更新或者是不需要更新的参数

    UpdateModel<Employee>(employee, null, null, new string[] { "Name" });

    3,定义IEmployee接口,Employee继承自IEmployee.

    UpdateModel<IEmployee>(employee);
  20. 进行数据的Delete动作必须在Post数据中执行
    1.   @foreach (var item in Model)
      {
      using (Html.BeginForm("Delete", "Employee", new { id = item.ID }))
      {
      <tr>
      <td>
      @Html.DisplayFor(modelItem => item.Name)
      </td>
      <td>
      @Html.DisplayFor(modelItem => item.Gender)
      </td>
      <td>
      @Html.DisplayFor(modelItem => item.City)
      </td>
      <td>
      @Html.DisplayFor(modelItem => item.DateOfBirth)
      </td>
      <td>
      @Html.ActionLink("Edit", "Edit", new { id = item.ID }) |
      @Html.ActionLink("Details", "Details", new { id = item.ID }) |
      <input type="submit" value="Delete" onclick="return confirm('确定删除 @item.Name 吗 ')" />
      </td>
      </tr>
      }
      }
  21. EF中字段属性的控制,如:[Required]、[Display(Name="")]  需在partial class中进行处理
    1. [MetadataType(typeof(EmployeeMetaData))]
      public partial class Employee
      { }
      public class EmployeeMetaData
      {
      [Required]
      [Display(Name = "姓名")]
      public string Name { get; set; } [Required]
      [Display(Name = "性别")]
      public char Gender { get; set; } [Required]
      [Display(Name = "所在城市")]
      public string City { get; set; } [Required]
      [Display(Name = "生日")]
      public DateTime DateOfBirth { get; set; } [Required]
      [Display(Name = "部门")]
      public int DepartID { get; set; }
      }
  22. Edit信息的时候不需要更新字段的处理,如不需要更新Name。
    1. partial class 中 去掉 [Required]
    2. Edit方法中用 查出来的实体来存储更新后的数据
    3.  [HttpPost]
      [ValidateAntiForgeryToken]
      public ActionResult Edit([Bind(Include = "ID,Gender,City,DateOfBirth,DepartID")] Employee employee)
      {
      Employee employeeFromDB = db.Employee.Find(employee.ID); //须要用你查出来的实体来存储更新后的数据,不更新Name字段
      employeeFromDB.City = employee.City;
      employeeFromDB.Gender = employee.Gender;
      employeeFromDB.DepartID = employee.DepartID;
      employeeFromDB.DateOfBirth = employee.DateOfBirth; if (ModelState.IsValid)
      {
      db.Entry(employeeFromDB).State = EntityState.Modified;
      db.SaveChanges();
      return RedirectToAction("Index");
      }
      ViewBag.DepartID = new SelectList(db.Department, "ID", "Name", employee.DepartID);
      return View(employee);
      }
    4. Controller的Create方法中必需的字段,添加验证检查处理
    5.  if (string.IsNullOrEmpty(employee.Name))
      {
      ModelState.AddModelError("Name", "姓名为必需字段");
      }
  23. Lambda表达式,统计Department下Employee数量
    1.  [HttpGet]
      public ActionResult EmployeeByDepartment()
      {
      var departmentTotals = db.Employee.Include("Department")
      .GroupBy(d => d.Department.Name)
      .Select(y => new DepartmentTotals
      {
      Name = y.Key,
      Total = y.Count()
      }).ToList().OrderByDescending(y => y.Total); return View(departmentTotals);
      }
  24. Controller中Return View()中如果指定带有后缀的View,如index.cshtml,则需要传递完整路径:
    1.  public ActionResult Index()
      {
      var employee = db.Employee.Include(e => e.Department);
      return View("~/Views/Employee/Index.cshtml",employee.ToList());
      }

ASP.NET MVC Notes - 01的更多相关文章

  1. ASP.NET MVC 5 01 - ASP.NET概述

    本篇目录: ASP.NET 概述 .NET Framework 与 ASP.NET ASP.NET MVC简介 ASP.NET的特色和优势 典型案例 ▁▃▅ ASP.NET概述 ▅▃▁ 目前开发B/S ...

  2. ASP.NET MVC 基础(01)

    [ASP.NET MVC ]系列文章大致会包含这样一些内容: 1.ASP.NET MVC 的一些高级知识点: 2.ASP.NET MVC 的一些最新技术: 3.ASP.NET MVC 网站安全方面的知 ...

  3. ASP.NET MVC:01理解MVC模式

    ASP.NET MVC是ASP.NET Web应用程序框架,以MVC模式为基础. MVC:Model View Controller 模型-视图-控制器Model(模型):负责对数据库的存取View( ...

  4. ASP.NET MVC 5 系列 学习笔记 目录 (持续更新...)

    前言: 记得当初培训的时候,学习的还是ASP.NET,现在回想一下,图片水印.统计人数.过滤器....HttpHandler是多么的经典! 不过后来接触到了MVC,便立马爱上了它.Model-View ...

  5. Asp.Net MVC 实用视频教程

    [北盟学习BaMn.Cn] Asp.Net MVC 第01课--创建第一个项目.avi [北盟学习BaMn.Cn] Asp.Net MVC 第02课--自己建一个controller view.avi ...

  6. [asp.net mvc 奇淫巧技] 01 - 封装上下文 - 在View中获取自定义的上下文

    我们在asp.net 开发中已经封装了最强大的HttpContext,我们可以在HttpContext中可以获取到几乎任何想获取的东西,也可以在HttpContext写入需要返回客户端的信息.但是这些 ...

  7. [ASP.NET MVC 小牛之路]01 - 理解MVC模式

    本人博客已转移至:http://www.exblr.com/liam  PS:MVC出来很久了,工作上一直没机会用.出于兴趣,工作之余我将展开对MVC的深入学习,通过博文来记录所学所得,并希望能得到各 ...

  8. [ASP.NET MVC 大牛之路]01 - 开篇

    匆匆2014,转眼就到末尾了.在这一年,你还有哪事情些想做而没有做? 2014年在我身上发生了两件意义重大的事,一是正月初一宝宝出生,我升级成为了爸爸:二是进入了一家创业公司,成为了技术负责人. 去年 ...

  9. 笨鸟先飞之ASP.NET MVC系列之过滤器(01过滤器简介)

    过滤器 什么是过滤器? 过滤器(Filter) 主要的作用大致可以理解为把我们的附加逻辑注入到MVC框架的请求处理. 在ASP.NET MVC的请求处理中一种有19个管道事件分别是 BeginRequ ...

随机推荐

  1. Hadoop学习笔记—2.不怕故障的海量存储:HDFS基础入门

    一.HDFS出现的背景 随着社会的进步,需要处理数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是却不方便管理和维护—>因此,迫切需要一种系统来管理多 ...

  2. SharpFileDB - a file database for small apps

    SharpFileDB - a file database for small apps 本文中文版在此处. I'm not an expert of database. Please feel fr ...

  3. Azure SQL Database (20) 使用SQL Server 2016 Upgrade Advisor

    <Windows Azure Platform 系列文章目录>  Azure SQL Database (19) Stretch Database 概览      Azure SQL Da ...

  4. EF:Fluent API 把一对多映射为一对一

    假设有两张表:A表和B表.A表与B表在数据库中的关系是一对多,但我们需要在EF中映射为一对一. 首先在A实体类和B实体类中互相为对方增加一个实体类的属性: public A { public B B ...

  5. JVM系列-分代收集垃圾回收

    Java自动垃圾回收(Automatic Garbage Collection)是自动回收堆上不再使用的内存,new的对象在程序中没有引用指向它,就会被回收.回收的实现很多,有Reference Co ...

  6. JDK安装源码src和doc

    (1)src 打开JDK的安装目录如(C:\Program Files\Java\jdk1.8.0_91)有一个src.zip的压缩文件,这个压缩文件里就是源码. mkdir src copy src ...

  7. C#实现约瑟夫环问题

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace orde ...

  8. UGUI 之获取当前控件的高度

    当Canvas Scaler选择Constant Pixel Size 当前的分辨率会被被固定,可以用RectTransform类里面的.rect变量值获取 height或Width. 在次情况下获取 ...

  9. MVC5 网站开发实践 2.1、管理员登陆

    目录 MVC5 网站开发实践  概述 MVC5 网站开发实践  1.建立项目 MVC5 网站开发实践  2.后台管理   1. 创建SHA256加密方法. 在Data项目中添加文件夹[Security ...

  10. MySQL学习笔记十七:复制特性

    一.MySQL的复制是将主数据库(master)的数据复制到从(slave)数据库上,专业一点讲就是将主数据库DDL和DML操作的二进制日志传到从库上,然后从库对这些二进制日志进行重做,使得主数据库与 ...