你的位置:首页 > ASP.net教程

[ASP.net教程]ASP.NET MVC Notes


  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" })

  14. Procedure AddEmployee
  15. CREATE PROCEDURE sp_AddEmployee   @Name nvarchar(50)=null,   @Gender char(1)=null,   @City nvarchar(50)=null,   @DateOfBirth DateTime=nullASBEGIN  -- 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)ENDGO

  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 > 0)      {        return RedirectToAction("Index");      }      else      {        return View();      }     }

        View Code
    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 > 0)      {        return RedirectToAction("Index");      }      else      {        return View();      }    }

        View Code
    3. Controller中UpdaetModel 更新 Model,获得提交过来的数据 
      1.  [HttpPost]    [ActionName("Create")]    public ActionResult Create_Post()    {      Employee employee = new Employee();      UpdateModel<Employee>(employee);      int numSucc = 0;      if (ModelState.IsValid)      {        EmployeeService employeeService = new EmployeeService();        numSucc = employeeService.AddEmployee(employee);      }       if (numSucc > 0)      {        return RedirectToAction("Index");      }      else      {        return View();      }    }

        View Code
  17. Service  新增数据服务:
    1. public int AddEmployee(Employee employee)    {      int numSucc = 0;      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;    }

      View Code
  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>    }  }

      View Code
  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; }   }

      View Code
  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);    }

      View Code
    4. Controller的Create方法中必需的字段,添加验证检查处理
    5.  if (string.IsNullOrEmpty(employee.Name))      {        ModelState.AddModelError("Name", "姓名为必需字段");      }

      View Code
  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);    }

      View Code
  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());    }

      View Code

 




几月份去普吉岛旅游最好什么时候去普吉岛旅游最便宜去普吉岛旅游跟团要多少钱去普吉岛旅游需要多少钱普吉岛旅游大概多少钱香蜜山生态果庄有直达车吗?从化香蜜山生态果庄在哪里坐车? 从化香蜜山各季节都有什么?香蜜山生态果庄什么最好吃? 从化香蜜山生态果庄冬季采摘什么?香蜜山生态果庄怎么收费? 彭州天宝温泉在哪里坐车?天宝温泉坐车需要多长时间? 深圳明马轩农庄具体位置?明马轩农庄旅游攻略? 深圳南澳名马轩度假山庄怎么样?南澳名马轩一日游攻略? 名马轩山庄地址?深圳名马轩山庄在哪里? 南澳马轩度假怎么样?深圳南澳骑马价格? 亚龙湾海底世界门票价格_三亚亚龙湾海底世界门票多少钱 蜈支洲岛景点推荐_蜈支洲岛景点介绍 亚龙湾森林公园特色景观推荐 冬季九黄机场九寨沟航班延误对策 太行山在哪里_太行山在哪个省_太行山在什么地方 清明上河园门票_开封清明上河园门票价格 武汉欢乐谷门票价格_武汉欢乐谷夜场票价多少钱_欢乐谷几点开门 梵净山门票_贵州铜仁梵净山门票价格 HL-30805GD Datasheet HL-30805GD Datasheet HL-30805GT Datasheet HL-30805GT Datasheet HL-30805HD Datasheet HL-30805HD Datasheet 1月去哪里旅游比较好 1月去哪里旅游比较好 1月去哪里旅游比较好 1月旅游好去处 1月旅游好去处 1月旅游好去处 1月最佳旅游地 1月最佳旅游地 1月最佳旅游地