public ViewResult Index()
{
var model = new HomePageViewModel();
SQLEmployeeData sqlData = new SQLEmployeeData(_context);
model.Employees = sqlData.GetAll();
return View(model);
}
修改完成后全部的代码如下
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;
using HelloWorld.Models;
namespace HelloWorld.Controllers
{
public class HomeController: Controller
{
private readonly HelloWorldDBContext _context;
public HomeController(HelloWorldDBContext context)
{
_context = context;
}
public ViewResult Index()
{
var model = new HomePageViewModel();
SQLEmployeeData sqlData = new SQLEmployeeData(_context);
model.Employees = sqlData.GetAll();
return View(model);
}
}
public class SQLEmployeeData
{
private HelloWorldDBContext _context { get; set; }
public SQLEmployeeData(HelloWorldDBContext context)
{
_context = context;
}
public void Add(Employee emp)
{
_context.Add(emp);
_context.SaveChanges();
}
public Employee Get(int ID)
{
return _context.Employees.FirstOrDefault(e => e.ID == ID);
}
public IEnumerable<Employee> GetAll()
{
return _context.Employees.ToList<Employee>();
}
}
public class HomePageViewModel
{
public IEnumerable<Employee> Employees { get; set; }
}
}
public ViewResult Detail(int id)
{
var model = new HomePageViewModel();
SQLEmployeeData sqlData = new SQLEmployeeData(_context);
Employee employee = sqlData.Get(id);
return View(employee);
}
代码几乎和 Index 一样除了以下几点
首先是参数部分,参数多了一个 int 类型的 id ,这个 id 和路由器的 id 是同一个意思routeBuilder.MapRoute("Default", "{controller=Home}/{action=Index}/{id?}");路由器中除了 controller 和 action 之外的所有参数,都会按照顺序传递给处理方法而且会强制转换为方法参数的类型,比如刚刚访问的是 /Home/Detail/1,那么 1 这个路由参数就会被赋值给路由参数 id,然后会传递给 Detail 方法,并转换为 int 类型
因为我们要获取的是详情,所以就不能使用 GetAll() 方法而是使用 Get 方法,Get 方法要么返回空,要么返回一个 Employee 的实例