zoukankan      html  css  js  c++  java
  • 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" })
      //或者是在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(50)=null,
           @Gender char(1)=null,
           @City nvarchar(50)=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 > 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
  • 相关阅读:
    toj 2819 Travel
    toj 2807 Number Sort
    zoj 2818 Prairie dogs IV
    zoj 1276 Optimal Array Multiplication Sequence
    toj 2802 Tom's Game
    toj 2798 Farey Sequence
    toj 2815 Searching Problem
    toj 2806 Replace Words
    toj 2794 Bus
    css截取字符
  • 原文地址:https://www.cnblogs.com/i-shanghai/p/5814635.html
Copyright © 2011-2022 走看看