누락 나는이 자습서를 실행하기 위해 노력하고있어. Index.cshtml, Details.cshtml 및 Edit.cshtml을 만들었습니다. 데이터베이스 연결이 작동 중입니다. 직원 이름 뒤에 편집 또는 세부 정보 링크를 클릭하면 라우팅이 작동하지 않는 것 같습니다. 나는 빈 곳을 얻는다.라우팅 문제가 인수
Index.cshtml
@using MyApp.Controllers
@model HomePageViewModel
@{
ViewBag.Title = "Home";
}
<h1>Welcome!</h1>
<table>
@foreach (var employee in Model.Employees)
{
<tr>
<td>@employee.name</td>
<td>
<a asp-controller="Employee" asp-action="Details"
asp-routeid="@employee.id">Details</a>
<a asp-controller="Employee" asp-action="Edit"
asp-routeid="@employee.id">Edit</a>
</td>
</tr>
}
</table>
Edit.cshtml
@model MyApp.Models.Employees
@{
ViewBag.Title = $"Edit {Model.name}";
}
<h1>Edit @Model.name</h1>
<form asp-action="Edit" method="post">
<div>
<label asp-for="name"></label>
<input asp-for="name" />
<span asp-validation-for="name"></span>
</div>
<div>
<input type="submit" value="Save" />
</div>
</form>
전체 컨트롤러
using Microsoft.AspNetCore.Mvc;
using MyApp.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace MyApp.Controllers
{
public class EmployeeController : Controller
{
public ViewResult Index()
{
var model = new HomePageViewModel();
using (var context = new FirstAppDemoDbContext())
{
SQLEmployeeData sqlData = new SQLEmployeeData(context);
model.Employees = sqlData.GetAll();
}
return View(model);
}
public IActionResult Details(int id)
{
var context = new FirstAppDemoDbContext();
SQLEmployeeData sqlData = new SQLEmployeeData(context);
var model = sqlData.Get(id);
if (model == null)
{
return RedirectToAction("Index");
}
return View(model);
}
[HttpGet]
public IActionResult Edit(int id)
{
var context = new FirstAppDemoDbContext();
SQLEmployeeData sqlData = new SQLEmployeeData(context);
var model = sqlData.Get(id);
if (model == null)
{
return RedirectToAction("Index");
}
return View(model);
}
[HttpPost]
public IActionResult Edit(int id, EmployeeEditViewModel input)
{
var context = new FirstAppDemoDbContext();
SQLEmployeeData sqlData = new SQLEmployeeData(context);
var employee = sqlData.Get(id);
if (employee != null && ModelState.IsValid)
{
employee.name = input.Name;
context.SaveChanges();
return RedirectToAction("Details", new { id = employee.id });
}
return View(employee);
}
}
public class SQLEmployeeData
{
private FirstAppDemoDbContext _context { get; set; }
public SQLEmployeeData(FirstAppDemoDbContext context)
{
_context = context;
}
public void Add(Employees emp)
{
_context.Add(emp);
_context.SaveChanges();
}
public Employees Get(int ID)
{
return _context.Employees.FirstOrDefault(e => e.id == ID);
}
public IEnumerable<Employees> GetAll()
{
return _context.Employees.ToList<Employees>();
}
}
public class HomePageViewModel
{
public IEnumerable<Employees> Employees { get; set; }
}
public class EmployeeEditViewModel
{
[Required, MaxLength(80)]
public string Name { get; set; }
}
}
응용 프로그램은 로컬 호스트 요청 : 인수 XXXX/직원/편집 < 0> (id 1 또는 2 대신 ...) localhost : xxxx/Employee의 내 인덱스 목록으로 리디렉션됩니다. . localhost : xxxx/Employee/Edit/1을 예상했지만 id 인수가 누락 된 것 같습니다. _ViewImports.cshtml
나는 무엇을 시도 할 수있는 내가 @addTagHelper의 *를 사용하고
, Microsoft.AspNetCore.Mvc.TagHelpers? 더 많은 정보가 필요하시면 알려주십시오! 앞으로 당신의 도움에 감사드립니다!
public IActionResult Edit (int id) 내부에 중단 점을 넣고 디버그에서 실행하여이 메서드로 실행되는지 확인하십시오. – Jacky
Controller를 Employee로 변경 했으므로 라우팅에서 약간의 문제가 발생할 수 있습니다. 전체 EmployeeController.cs를 게시하면 더 쉽게 수행 할 수 있습니다 – Jacky