【发布时间】:2023-02-08 23:00:39
【问题描述】:
我正在尝试在大陆详细信息页面中可视化当前大陆的数据相关国家/地区。
如果我们使用 Razor 页面,功能如下所示:
public async Task<IActionResult> OnGetAsync(string id)
{
Continent = await _context.Continents
.Include(c => c.Countries)
.AsNoTracking()
.FirstOrDefaultAsync(m => m.ID == id);
if (Continent == null)
{
return NotFound();
}
return Page();
}
我正在尝试在 ASP.NET Core MVC 控制器中发出相同的请求:
public async Task<IActionResult> Details(string id)
{
if (id == null || _context.Continents == null)
{
return NotFound();
}
var continent = await _context.Continents
.Include(x => x.Countries)
.AsNoTracking()
.FirstOrDefaultAsync(m => m.ID == id);
if (continent == null)
{
return NotFound();
}
return View(continent);
}
但是 Countries 被标记为红色:
错误 CS1061
“Continent”不包含“Countries”的定义,并且找不到接受“Continent”类型的第一个参数的可访问扩展方法“Countries”(您是否缺少 using 指令或程序集引用?)
C:\Users\Partsmaster\source\repos\RazorCountry\RazorCountry\Controllers\ContinentsController.cs我应该如何正确修改 ASP.NET Core MVC 控制器中的读取相关数据?
大陆控制器.cs:
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.EntityFrameworkCore; using RazorCountry.Data; using RazorCountry.Models; using RazorCountry.Models.ViewModels; namespace RazorCountry.Controllers { public class ContinentsController : Controller { private readonly AppDbContext _context; public ContinentsController(AppDbContext context) { _context = context; } // GET: Continents public async Task<IActionResult> Index(string searchString, string chosenFilter) { var viewModel = new ContinentViewModel(); IQueryable<Continent> continents = _context.Continents; if (!String.IsNullOrEmpty(searchString)) { switch (chosenFilter) { case "id": viewModel.Filter = "id"; continents = continents.Where(s => s.ID.Contains(searchString)); break; case "name": viewModel.Filter = "name"; continents = continents.Where(s => s.Name.Contains(searchString)); break; } } viewModel.Continents = continents; viewModel.SearchString = searchString; return View(viewModel); } // GET: Continents/Details/5 public async Task<IActionResult> Details(string id) { if (id == null || _context.Continents == null) { return NotFound(); } var continent = await _context.Continents.Include(x => x.Countries).AsNoTracking() .FirstOrDefaultAsync(m => m.ID == id); if (continent == null) { return NotFound(); } return View(continent); } // GET: Continents/Create public IActionResult Create() { return View(); } // POST: Continents/Create [HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> Create([Bind("ID,Name")] Continent continent) { if (ModelState.IsValid) { _context.Add(continent); await _context.SaveChangesAsync(); return RedirectToAction(nameof(Index)); } return View(continent); } // GET: Continents/Edit/5 public async Task<IActionResult> Edit(string id) { if (id == null || _context.Continents == null) { return NotFound(); } var continent = await _context.Continents.FindAsync(id); if (continent == null) { return NotFound(); } return View(continent); } // POST: Continents/Edit/5 [HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> Edit(string id, [Bind("ID,Name")] Continent continent) { if (id != continent.ID) { return NotFound(); } if (ModelState.IsValid) { try { _context.Update(continent); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ContinentExists(continent.ID)) { return NotFound(); } else { throw; } } return RedirectToAction(nameof(Index)); } return View(continent); } // GET: Continents/Delete/5 public async Task<IActionResult> Delete(string id) { if (id == null || _context.Continents == null) { return NotFound(); } var continent = await _context.Continents .FirstOrDefaultAsync(m => m.ID == id); if (continent == null) { return NotFound(); } return View(continent); } // POST: Continents/Delete/5 [HttpPost, ActionName("Delete")] [ValidateAntiForgeryToken] public async Task<IActionResult> DeleteConfirmed(string id) { if (_context.Continents == null) { return Problem("Entity set 'AppDbContext.Continents' is null."); } var continent = await _context.Continents.FindAsync(id); if (continent != null) { _context.Continents.Remove(continent); } await _context.SaveChangesAsync(); return RedirectToAction(nameof(Index)); } private bool ContinentExists(string id) { return _context.Continents.Any(e => e.ID == id); } } }尝试理解“阅读相关数据”。可能我需要添加一些 ViewModel 并重写 Details 脚本?
【问题讨论】:
标签: asp.net-core-mvc asp.net-core-6.0