C# 公共异步任务详细信息(int?id) { if(id==null) { 返回NotFound(); } var employee=await\u context.Employees .包括(e=>e.预约) .包括(e=>e.Department) .Si

C# 公共异步任务详细信息(int?id) { if(id==null) { 返回NotFound(); } var employee=await\u context.Employees .包括(e=>e.预约) .包括(e=>e.Department) .Si,c#,asp.net-core-2.0,asp.net-core-mvc-2.0,C#,Asp.net Core 2.0,Asp.net Core Mvc 2.0,公共异步任务详细信息(int?id) { if(id==null) { 返回NotFound(); } var employee=await\u context.Employees .包括(e=>e.预约) .包括(e=>e.Department) .SingleOrDefaultAsync(m=>m.EmployeeID==id); if(employee==null) { 返回NotFound(); } 返回视图(员工); } //获取:员工/确认/5 公共异步任务确认(int?id) {

公共异步任务详细信息(int?id) { if(id==null) { 返回NotFound(); } var employee=await\u context.Employees .包括(e=>e.预约) .包括(e=>e.Department) .SingleOrDefaultAsync(m=>m.EmployeeID==id); if(employee==null) { 返回NotFound(); } 返回视图(员工); } //获取:员工/确认/5 公共异步任务确认(int?id) { if(id==null) { 返回NotFound(); } var employee=await\u context.Employees.Include(d=>d.Department).Include(a=>a.Appointment) .SingleOrDefaultAsync(m=>m.EmployeeID==id); if(employee==null) { 返回NotFound(); } 返回视图(员工); } //获取:员工/创建 public IActionResult Create() { var departments=_context.departments.ToList(); var Appoints=\u context.appoints.Include(x=>x.Employees)。其中(x=>!x.Em‌​被雇佣者。任何())。托利斯‌​t(); var viewModel=新员工表单VM { 部门=部门, 约会=约会 }; 返回视图(viewModel); } [HttpPost] [ValidateAntiForgeryToken] 公共异步任务创建(EmployeeFormVM员工) { if(ModelState.IsValid) { var emp=新员工(); { emp.FirstName=employee.FirstName; emp.LastName=employee.LastName; emp.DepartmentID=employee.DepartmentID; emp.AppointmentID=employee.AppointmentID; } //查询数据库以检查是否存在名/姓相同的员工 Employee existingEmployee=wait_context.Employees.SingleOrDefaultAsync(m=>m.FirstName==Employee.FirstName&&m.LastName==Employee.LastName); if(existingEmployee!=null) { //如果重复员工,则显示错误 ModelState.addmodeleror(string.Empty,“具有此名称的员工已注册。请联系服务台以了解任何日程安排冲突。”); employee.Departments=_context.Departments.ToList(); //employee.Appointments=_context.appoints.ToList(); employee.Appointments=_context.appoints.ToList(); 返回视图(员工); } //查询数据库以检查约会是否已分配给员工 Employee existingAppointment=await _context.Employees.SingleOrDefaultAsync(m=>m.AppointmentID==Employee.AppointmentID); if(existingAppointment!=null) { //如果已选择约会,则显示错误 ModelState.AddModelError(string.Empty,“此约会已被接受。请选择其他时间段”); employee.Departments=_context.Departments.ToList(); //employee.Appointments=_context.appoints.ToList(); employee.Appointments=_context.appoints.ToList(); 返回视图(员工); } _添加(emp); wait_context.SaveChangesAsync(); //返回重定向到操作(名称(索引)); var newlyCreatedId=emp.EmployeeID; 返回RedirectToAction(nameof(Confirmation),new{id=newlyCreatedId}); } 返回视图(员工); } //获取:雇员/编辑/5 公共异步任务编辑(int?id) { if(id==null) { 返回NotFound(); } var employeevm=new EmployeeFormVM(); { Employee=await_context.Employees.SingleOrDefaultAsync(m=>m.EmployeeID==id); if(employee==null) { 返回NotFound(); } employeevm.EmployeeID=employee.EmployeeID; employeevm.FirstName=employee.FirstName; employeevm.LastName=employee.LastName; //检索部门列表 var departments=_context.departments.ToList(); employeevm.Departments=部门; //设置所选部门 employeevm.DepartmentID=employee.DepartmentID; //检索约会列表 var appoints=_context.appoints.ToList(); employeevm.Appointments=约会; //设置所选部门 employeevm.AppointmentID=employee.AppointmentID; } 返回视图(employeevm); } //职位:雇员/编辑/5 //若要防止套印攻击,请启用要绑定到的特定属性,例如 //更多详细信息请参见http://go.microsoft.com/fwlink/?LinkId=317598. [HttpPost] [ValidateAntiForgeryToken] 公共异步任务编辑(EmployeeFormVM vmEdit) { if(ModelState.IsValid) { Employee=_context.Employees.SingleOrDefault(e=>e.EmployeeID==vmEdit.EmployeeID); if(employee==null) { 返回NotFound(); } employee.FirstName=vmEdit.FirstName; employee.LastName=vmEdit.LastName; employee.DepartmentID=vmEdit.DepartmentID; employee.AppointmentID=vmEdit.AppointmentID; 尝试 { _上下文更新(员工); wait_context.SaveChangesAsync(); } catch(DbUpdateConcurrencyException) { 如果(!EmployeeExists(vmEdit.EmployeeID)) { 返回NotFound(); } 其他的 { 投掷; } } 返回重定向到操作(名称(索引));
public class Employee
{
    public int EmployeeID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public int DepartmentID { get; set; }
    public Department Department { get; set; }

    public int AppointmentID { get; set; }
    public Appointment Appointment { get; set; }
}

public class Department
{
    public int DepartmentID { get; set; }
    public string Name { get; set; }

    public ICollection<Employee> Employees { get; set; }
}

public class Appointment
{
    public int AppointmentID { get; set; }
    public string TimeSlot { get; set; }

    public ICollection<Employee> Employees { get; set; }
}
public class WinTenDbContext : DbContext
{
    public WinTenDbContext(DbContextOptions<WinTenDbContext> options) : base(options)
    { }

    public DbSet<Employee> Employees { get; set; }
    public DbSet<Department> Departments { get; set; }
    public DbSet<Appointment> Appointments { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Employee>()
            .HasKey(e => e.EmployeeID);

        modelBuilder.Entity<Employee>()
            .Property(e => e.FirstName)
            .HasColumnType("varchar(50)")
            .HasMaxLength(50)
            .IsRequired();

        modelBuilder.Entity<Employee>()
            .Property(e => e.LastName)
            .HasColumnType("varchar(50)")
            .HasMaxLength(50)
            .IsRequired();

        modelBuilder.Entity<Department>()
            .HasKey(d => d.DepartmentID);

        modelBuilder.Entity<Department>()
            .Property(d => d.Name)
            .HasColumnType("varchar(50)")
            .HasMaxLength(50);

        modelBuilder.Entity<Appointment>()
            .HasKey(a => a.AppointmentID);

        modelBuilder.Entity<Appointment>()
            .Property(a => a.TimeSlot)
            .HasColumnType("varchar(50)")
            .HasMaxLength(50);
    }
}
public class EmployeeFormVM
{
    public int EmployeeID { get; set; }

    [Required(ErrorMessage = "Please enter your First Name")]
    [Display(Name = "First Name")]
    [StringLength(50)]
    public string FirstName { get; set; }

    [Required(ErrorMessage = "Please enter your Last Name")]
    [Display(Name = "Last Name")]
    [StringLength(50)]
    public string LastName { get; set; }

    [Required(ErrorMessage = "Please select your Department")]
    [Display(Name = "Department")]
    public int DepartmentID { get; set; }

    public IEnumerable<Department> Departments { get; set; }

    [Required(ErrorMessage = "Please select your Appointment")]
    [Display(Name = "Appointment")]
    public int AppointmentID { get; set; }

    public IEnumerable<Appointment> Appointments { get; set; }
}
public class EmployeesController : Controller
{
    private readonly WinTenDbContext _context;

    public EmployeesController(WinTenDbContext context)
    {
        _context = context;
    }

    public async Task<IActionResult> Index(string sortOrder, string currentFilter, string searchString, int? page)
    {
        ViewData["CurrentSort"] = sortOrder;
        ViewData["FirstNameSortParm"] = sortOrder == "fname" ? "fname_desc" : "fname";
        ViewData["LastNameSortParm"] = String.IsNullOrEmpty(sortOrder) ? "lname_desc" : "";
        ViewData["DeptNameSortParm"] = sortOrder == "deptname" ? "deptname_desc" : "deptname";
        ViewData["DateSortParm"] = sortOrder == "time_slot" ? "time_slot_desc" : "time_slot";

        if (searchString != null)
        {
            page = 1;
        }
        else
        {
            searchString = currentFilter;
        }

        ViewData["CurrentFilter"] = searchString;

        var employees = from s in _context.Employees.Include(e => e.Appointment).Include(e => e.Department)
                        select s;

        if (!String.IsNullOrEmpty(searchString))
        {
            employees = employees.Where(s => s.LastName.Contains(searchString)
                                   || s.FirstName.Contains(searchString));
        }

        switch (sortOrder)
        {
            case "fname":
                employees = employees.OrderBy(s => s.FirstName);
                break;
            case "fname_desc":
                employees = employees.OrderByDescending(s => s.FirstName);
                break;
            case "lname_desc":
                employees = employees.OrderByDescending(s => s.LastName);
                break;
            case "deptname":
                employees = employees.OrderBy(s => s.Department.Name);
                break;
            case "deptname_desc":
                employees = employees.OrderByDescending(s => s.Department.Name);
                break;
            case "time_slot":
                employees = employees.OrderBy(s => s.Appointment.AppointmentID);
                break;
            case "time_slot_desc":
                employees = employees.OrderByDescending(s => s.Appointment.AppointmentID);
                break;
            default:
                employees = employees.OrderBy(s => s.LastName);
                break;
        }

        int pageSize = 10;
        return View(await PaginatedList<Employee>.CreateAsync(employees.AsNoTracking(), page ?? 1, pageSize));
    }

    // GET: Employees/Details/5
    public async Task<IActionResult> Details(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var employee = await _context.Employees
            .Include(e => e.Appointment)
            .Include(e => e.Department)
            .SingleOrDefaultAsync(m => m.EmployeeID == id);
        if (employee == null)
        {
            return NotFound();
        }

        return View(employee);
    }

    // GET: Employees/Confirmation/5
    public async Task<IActionResult> Confirmation(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var employee = await _context.Employees.Include(d => d.Department).Include(a => a.Appointment)
            .SingleOrDefaultAsync(m => m.EmployeeID == id);

        if (employee == null)
        {
            return NotFound();
        }

        return View(employee);
    }

    // GET: Employees/Create
    public IActionResult Create()
    {
        var departments = _context.Departments.ToList();
        var appointments = _context.Appointments.Include(x => x.Employees).Where(x => !x.Em‌​ployees.Any()).ToLis‌​t();

        var viewModel = new EmployeeFormVM
        {
            Departments = departments,
            Appointments = appointments
        };

        return View(viewModel);
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create(EmployeeFormVM employee)
    {
        if (ModelState.IsValid)
        {
            var emp = new Employee();
            {
                emp.FirstName = employee.FirstName;
                emp.LastName = employee.LastName;
                emp.DepartmentID = employee.DepartmentID;
                emp.AppointmentID = employee.AppointmentID;
            }

            // Query DB to check if Employee exists with same First/Last Name
            Employee existingEmployee = await _context.Employees.SingleOrDefaultAsync(m => m.FirstName == employee.FirstName && m.LastName == employee.LastName);
            if (existingEmployee != null)
            {
                // Display Error if duplicate employee
                ModelState.AddModelError(string.Empty, "An employee with this name has already registered. Please contact the Service Desk for any scheduling conflicts.");
                employee.Departments = _context.Departments.ToList();
                //employee.Appointments = _context.Appointments.ToList();
                employee.Appointments = _context.Appointments.ToList();
                return View(employee);
            }

            // Query DB to check if appointment has already been assigned to an employee
            Employee existingAppointment = await _context.Employees.SingleOrDefaultAsync(m => m.AppointmentID == employee.AppointmentID);
            if (existingAppointment != null)
            {
                // Display error if the appointment was already chosen
                ModelState.AddModelError(string.Empty, "This appointment has already been taken. Please select another timeslot.");
                employee.Departments = _context.Departments.ToList();
                //employee.Appointments = _context.Appointments.ToList();
                employee.Appointments = _context.Appointments.ToList();
                return View(employee);
            }

            _context.Add(emp);
            await _context.SaveChangesAsync();
            //return RedirectToAction(nameof(Index));

            var newlyCreatedId = emp.EmployeeID;
            return RedirectToAction(nameof(Confirmation), new { id = newlyCreatedId });
        }
        return View(employee);
    }

    // GET: Employees/Edit/5
    public async Task<IActionResult> Edit(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var employeevm = new EmployeeFormVM();
        {
            Employee employee = await _context.Employees.SingleOrDefaultAsync(m => m.EmployeeID == id);

            if (employee == null)
            {
                return NotFound();
            }

            employeevm.EmployeeID = employee.EmployeeID;
            employeevm.FirstName = employee.FirstName;
            employeevm.LastName = employee.LastName;

            // Retrieve list of Departments
            var departments = _context.Departments.ToList();
            employeevm.Departments = departments;
            // Set the selected department
            employeevm.DepartmentID = employee.DepartmentID;

            // Retrieve list of Appointments
            var appointments = _context.Appointments.ToList();
            employeevm.Appointments = appointments;
            // Set the selected department
            employeevm.AppointmentID = employee.AppointmentID;
        }
        return View(employeevm);
    }

    // POST: Employees/Edit/5
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Edit(EmployeeFormVM vmEdit)
    {
        if (ModelState.IsValid)
        {
            Employee employee = _context.Employees.SingleOrDefault(e => e.EmployeeID == vmEdit.EmployeeID);

            if (employee == null)
            {
                return NotFound();
            }

            employee.FirstName = vmEdit.FirstName;
            employee.LastName = vmEdit.LastName;
            employee.DepartmentID = vmEdit.DepartmentID;
            employee.AppointmentID = vmEdit.AppointmentID;

            try
            {
                _context.Update(employee);
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!EmployeeExists(vmEdit.EmployeeID))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }
            return RedirectToAction(nameof(Index));
        }
        return View(vmEdit);
    }

    // GET: Employees/Delete/5
    public async Task<IActionResult> Delete(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var employee = await _context.Employees
            .Include(e => e.Appointment)
            .Include(e => e.Department)
            .SingleOrDefaultAsync(m => m.EmployeeID == id);
        if (employee == null)
        {
            return NotFound();
        }

        return View(employee);
    }

    // POST: Employees/Delete/5
    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> DeleteConfirmed(int id)
    {
        var employee = await _context.Employees.SingleOrDefaultAsync(m => m.EmployeeID == id);
        _context.Employees.Remove(employee);
        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Index));
    }

    private bool EmployeeExists(int id)
    {
        return _context.Employees.Any(e => e.EmployeeID == id);
    }
}
@using (Html.BeginForm("Create", "Employees"))
    {
        @Html.ValidationSummary(true, "", new { @class = "validation-summary-errors" })

        <div class="form-group">
            @Html.LabelFor(e => e.FirstName)
            @Html.TextBoxFor(e => e.FirstName, new { @class = "form-control" })
            @Html.ValidationMessageFor(e => e.FirstName)
        </div>

        <div class="form-group">
            @Html.LabelFor(e => e.LastName)
            @Html.TextBoxFor(e => e.LastName, new { @class = "form-control" })
            @Html.ValidationMessageFor(e => e.LastName)
        </div>

        <div class="form-group">
            @Html.LabelFor(d => d.DepartmentID)
            @Html.DropDownListFor(d => d.DepartmentID, new SelectList(Model.Departments, "DepartmentID", "Name"), "", new { @class = "form-control" })
            @Html.ValidationMessageFor(d => d.DepartmentID)
        </div>

        <div class="form-group">
            @Html.LabelFor(a => a.AppointmentID)
            @Html.DropDownListFor(a => a.AppointmentID, new SelectList(Model.Appointments, "AppointmentID", "TimeSlot"), "", new { @class = "form-control" })
            @Html.ValidationMessageFor(a => a.AppointmentID)
        </div>

        <div class="form-group">
            <button type="submit" class="btn btn-primary">Submit</button>
        </div>
    }
<div class="row">
<div class="col-md-12">
    <img src="~/images/confirm.png" />
    <h2>Thank you @Html.DisplayFor(model => model.FirstName) @Html.DisplayFor(model => model.LastName)!</h2>    
    <p>Your <b>@Html.DisplayFor(model => model.Appointment.TimeSlot)</b> appointment has been booked. If you need to reschedule this appointment, please call the Service Desk at x1380.</p>
</div>
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//ZContent.net//Zap Calendar 1.0//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
SUMMARY:Abraham Lincoln
UID:2008-04-28-04-15-56-62-@americanhistorycalendar.com
SEQUENCE:0
STATUS:CONFIRMED
TRANSP:TRANSPARENT
RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=2;BYMONTHDAY=12
DTSTART:20080212
DTEND:20080213
DTSTAMP:20150421T141403
CATEGORIES:U.S. Presidents,Civil War People
LOCATION:Hodgenville\, Kentucky
GEO:37.5739497;-85.7399606
DESCRIPTION:Born February 12\, 1809\nSixteenth President (1861-1865)\n\n\n
 \nhttp://AmericanHistoryCalendar.com
URL:http://americanhistorycalendar.com/peoplecalendar/1,328-abraham-lincol
 n
END:VEVENT
END:VCALENDAR
public IActionResult CreateICal(int eventId)
{
    var evt = db.Events.Find(eventId);

    // generate iCal from event instancce

    var bytes = Encoding.UTF8.GetBytes(icalText);
    return File(bytes, "text/calendar", $"{evt.Name}.ics");
}