Asp.net mvc .NET核心MVC控制器错误
我最近反向设计了一个表来创建一个模型和一个上下文类。然后,我从VS2017脚手架创建了一个控制器和一个视图。当我尝试加载我的页面时,我收到以下错误: InvalidOperationException:无法解析类型的服务 “TestSolutions.Models.TraderRoute.TraderContext”,同时尝试 激活“TestSolutions.Controller.RoutePartnersController” Microsoft.Extensions.Internal.ActivatorUtilities.GetService(IServiceProvider sp,类型类型,类型要求者,布尔isDefaultParameterRequired) 控制器Asp.net mvc .NET核心MVC控制器错误,asp.net-mvc,asp.net-core,invalidoperationexception,Asp.net Mvc,Asp.net Core,Invalidoperationexception,我最近反向设计了一个表来创建一个模型和一个上下文类。然后,我从VS2017脚手架创建了一个控制器和一个视图。当我尝试加载我的页面时,我收到以下错误: InvalidOperationException:无法解析类型的服务 “TestSolutions.Models.TraderRoute.TraderContext”,同时尝试 激活“TestSolutions.Controller.RoutePartnersController” Microsoft.Extensions.Internal.Ac
public class RoutePartnersController : Controller
{
private readonly TraderContext _context;
public RoutePartnersController(TraderContext context)
{
_context = context;
}
// GET: RoutePartners
public async Task<IActionResult> Index()
{
return View(await _context.RoutePartner.ToListAsync());
}
// GET: RoutePartners/Details/5
public async Task<IActionResult> Details(Guid? id)
{
if (id == null)
{
return NotFound();
}
var routePartner = await _context.RoutePartner
.SingleOrDefaultAsync(m => m.PartnerId == id);
if (routePartner == null)
{
return NotFound();
}
return View(routePartner);
}
// GET: RoutePartners/Create
public IActionResult Create()
{
return View();
}
// POST: RoutePartners/Create
// 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> Create([Bind("Id,PartnerId,RouteCompany,RouteCode,Dark,Lit,Contra,CreateDate,CreateBy")] RoutePartner routePartner)
{
if (ModelState.IsValid)
{
routePartner.PartnerId = Guid.NewGuid();
_context.Add(routePartner);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(routePartner);
}
// GET: RoutePartners/Edit/5
public async Task<IActionResult> Edit(Guid? id)
{
if (id == null)
{
return NotFound();
}
var routePartner = await _context.RoutePartner.SingleOrDefaultAsync(m => m.PartnerId == id);
if (routePartner == null)
{
return NotFound();
}
return View(routePartner);
}
// POST: RoutePartners/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(Guid id, [Bind("Id,PartnerId,RouteCompany,RouteCode,Dark,Lit,Contra,CreateDate,CreateBy")] RoutePartner routePartner)
{
if (id != routePartner.PartnerId)
{
return NotFound();
}
if (ModelState.IsValid)
{
try
{
_context.Update(routePartner);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!RoutePartnerExists(routePartner.PartnerId))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction("Index");
}
return View(routePartner);
}
// GET: RoutePartners/Delete/5
public async Task<IActionResult> Delete(Guid? id)
{
if (id == null)
{
return NotFound();
}
var routePartner = await _context.RoutePartner
.SingleOrDefaultAsync(m => m.PartnerId == id);
if (routePartner == null)
{
return NotFound();
}
return View(routePartner);
}
// POST: RoutePartners/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(Guid id)
{
var routePartner = await _context.RoutePartner.SingleOrDefaultAsync(m => m.PartnerId == id);
_context.RoutePartner.Remove(routePartner);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
private bool RoutePartnerExists(Guid id)
{
return _context.RoutePartner.Any(e => e.PartnerId == id);
}
}
公共类RoutePartnersController:控制器
{
私有只读TraderContext\u上下文;
公共路由PartnersController(TraderContext上下文)
{
_上下文=上下文;
}
//获取:RoutePartners
公共异步任务索引()
{
返回视图(wait_context.RoutePartner.ToListAsync());
}
//获取:RoutePartners/Details/5
公共异步任务详细信息(Guid?id)
{
if(id==null)
{
返回NotFound();
}
var routePartner=await\u context.routePartner
.SingleOrDefaultAsync(m=>m.PartnerId==id);
如果(routePartner==null)
{
返回NotFound();
}
返回视图(routePartner);
}
//获取:RoutePartners/Create
public IActionResult Create()
{
返回视图();
}
//POST:RoutePartners/Create
//若要防止套印攻击,请启用要绑定到的特定属性,例如
//更多详细信息请参见http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务创建([Bind(“Id,PartnerId,RouteCompany,RouteCode,Dark,Light,Contra,CreateDate,CreateBy”)]RoutePartner RoutePartner
{
if(ModelState.IsValid)
{
RoutePartnerId=Guid.NewGuid();
_添加(routePartner);
wait_context.SaveChangesAsync();
返回操作(“索引”);
}
返回视图(routePartner);
}
//获取:RoutePartners/Edit/5
公共异步任务编辑(Guid?id)
{
if(id==null)
{
返回NotFound();
}
var routePartner=wait _context.routePartner.SingleOrDefaultAsync(m=>m.PartnerId==id);
如果(routePartner==null)
{
返回NotFound();
}
返回视图(routePartner);
}
//发布:RoutePartners/Edit/5
//若要防止套印攻击,请启用要绑定到的特定属性,例如
//更多详细信息请参见http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务编辑(Guid id,[Bind(“id,PartnerId,RouteCompany,RouteCode,Dark,Light,Contra,CreateDate,CreateBy”)]RoutePartner RoutePartner
{
if(id!=routePartner.PartnerId)
{
返回NotFound();
}
if(ModelState.IsValid)
{
尝试
{
_更新(routePartner);
wait_context.SaveChangesAsync();
}
catch(DbUpdateConcurrencyException)
{
如果(!routePartner存在(routePartner.PartnerId))
{
返回NotFound();
}
其他的
{
投掷;
}
}
返回操作(“索引”);
}
返回视图(routePartner);
}
//获取:RoutePartners/Delete/5
公共异步任务删除(Guid?id)
{
if(id==null)
{
返回NotFound();
}
var routePartner=await\u context.routePartner
.SingleOrDefaultAsync(m=>m.PartnerId==id);
如果(routePartner==null)
{
返回NotFound();
}
返回视图(routePartner);
}
//发布:RoutePartners/Delete/5
[HttpPost,ActionName(“删除”)]
[ValidateAntiForgeryToken]
公共异步任务已确认(Guid id)
{
var routePartner=wait _context.routePartner.SingleOrDefaultAsync(m=>m.PartnerId==id);
_context.RoutePartner.Remove(RoutePartner);
wait_context.SaveChangesAsync();
返回操作(“索引”);
}
私有布尔路由器存在(Guid id)
{
返回_context.RoutePartner.Any(e=>e.PartnerId==id);
}
}
以下是我的看法:
@model TestSolutions.Models.TraderRoute.RoutePartner
@{ViewData["Title"] = "Details";}
<h2>Details</h2>
<div>
<h4>RoutePartner</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.Id)
</dt>
<dd>
@Html.DisplayFor(model => model.Id)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Dark)
</dt>
<dd>
@Html.DisplayFor(model => model.Dark)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Lit)
</dt>
<dd>
@Html.DisplayFor(model => model.Lit)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Contra)
</dt>
<dd>
@Html.DisplayFor(model => model.Contra)
</dd>
<dt>
@Html.DisplayNameFor(model => model.CreateDate)
</dt>
<dd>
@Html.DisplayFor(model => model.CreateDate)
</dd>
<dt>
@Html.DisplayNameFor(model => model.CreateBy)
</dt>
<dd>
@Html.DisplayFor(model => model.CreateBy)
</dd>
</dl>
</div>
<div>
@Html.ActionLink("Edit", "Edit", new { /* id = Model.PrimaryKey */ }) | <a asp-action="Index">Back to List</a>
</div>
@model TestSolutions.Models.TraderRoute.RoutePartner
@{ViewData[“Title”]=“Details”;}
细节
路由器管理员
@DisplayNameFor(model=>model.Id)
@DisplayFor(model=>model.Id)
@DisplayNameFor(model=>model.Dark)
@DisplayFor(model=>model.Dark)
@DisplayNameFor(model=>model.Lit)
@DisplayFor(model=>model.Lit)
@DisplayNameFor(model=>model.conta)
@DisplayFor(model=>model.conta)
@DisplayNameFor(model=>model.CreateDate)
@DisplayFor(model=>model.CreateDate)
@DisplayNameFor(model=>model.CreateBy)
@DisplayFor(model=>model.CreateBy)
@ActionLink(“编辑”,“编辑”,新建{/*id=Model.PrimaryKey*/})|返回列表
似乎未在DI(IoC)容器中注册TraderContext
。请务必登记
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
...
services.AddDbContext<TraderContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
// Remove this if you use SQL 2012 or higher.
b => b.UseRowNumberForPaging()));
...
}
}
您可以分享控制器和视图吗?刚刚添加,谢谢。您还可以演示如何在
启动
课程中向DI注册TraderContext
吗?您是对的!!!!!非常感谢,我忽略了注册过程。现在页面已正确加载。但是,当我单击编辑链接时,我收到一个“页面未找到错误”。编辑链接是从脚手架构建的。知道我做错了什么吗
Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools
Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design
Scaffold-DbContext "Server=SERVER;Database=DATABASE;Trusted_Connection=True;MultipleActiveResultSets=true" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models