【问题标题】:ASP.net core View does not return value to controllerASP.net 核心视图不向控制器返回值
【发布时间】:2020-06-26 09:58:06
【问题描述】:

我想要实现的是两件事:

  1. 发送我从控制器内部的外部源(API)获得的值进行处理。 “检查该ID是否存在于我的数据库中。如果不添加它”但我的问题是我这样做时总是得到null。即使我可以在视图中查看它,该 ID 也始终为空。但即使 id 为空,我也应该能够搜索我的数据库。
  2. 这就是我的第二个问题出现的原因 InvalidOperationException:尝试激活“MoviesDB.Controllers.HomeController”时无法解析“MoviesDB.Models.ApplicationDbContext”类型的服务。

所以总而言之,我的视图从不向我的控制器发送 ID。当我尝试访问我的数据库时,我也遇到了这个错误。 (这个错误发生在启动时,我什至没有尝试访问那部分功能)

我的观点是这样的。我只会发布受影响的:所以这里会发生什么。我的列表完全按预期加载并显示了我需要的一切。在我单击详细信息并访问我的控制器后,它不会给我一个值。我稍后会在另一块代码中解释

  <tbody>
            @foreach (var item in Model.Search)
            {
                @item.Runtime
                //       each table row is assigned with the imdbID returned from the API. if the user clicks one of the rows
                //then the system will 1st check the database if this movie exist in the database. if not then it will be added and then desplayed
                //if the movie exist then it will be automatically desplayed to the user without making another API call.
                <tr >
                    <td><img src="@item.Poster" class="img-thumbnail" alt="Responsive image" width="200"> </td>
                    <td>@item.Title</td>
                    <td>@item.Year @item.imdbID</td>
                    <td>  <a asp-controller="Home" asp-action="FindMovie" asp-for="@item.imdbID">Details </a> </td>
                </tr>
            }
        </tbody>

所以一旦我启动我的项目,这里会发生什么错误:

InvalidOperationException:无法解析服务类型 尝试激活时出现“MoviesDB.Models.ApplicationDbContext” 'MoviesDB.Controllers.HomeController'。

我不知道为什么会发生这种情况,我会将我的服务发布到下一个区块,以防万一那里有我遗漏的东西。现在好了,如果我注释掉所有的数据库内容并且只在 FindMovie 内部操作

Console.WriteLine("I am in Find" + imdbID); 

我只会得到“我在查找中”,但旁边不会有 id。所以看来我没有发送 ID

private readonly ApplicationDbContext _db;
[BindProperty]
 public Movies movies { get; set; }
 public HomeController(ApplicationDbContext db)
 {
     _db = db;
}
  
public IActionResult Index()
{
    return View();
}

[HttpGet]
public IActionResult FindMovie()
{
    return View();
}


[HttpPost]

public IActionResult FindMovie(string imdbID)
 {
    Console.WriteLine("I am in Find" + imdbID);
     var item = _db.Movies.Where(s => s.imdbID.Equals(imdbID)).FirstOrDefault();
    if (item != null)
    {
        return NotFound();
    }
   return Content("Id is: {imdbID}");
}

最后是我的服务:

 services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = false)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddControllersWithViews();
    services.AddRazorPages();

【问题讨论】:

  • 您的问题是Unable to resolve service for type 您的控制器无法解析 DbContext。我建议您创建新的空项目并根据教程设置数据库并检查您的应用与新应用之间的差异。
  • 但我可以访问数据库以添加具有身份的用户。而且那个项目已经花了我几天的时间来创建,我不想重新开始。据我所知,我的问题在服务范围内。但我不知道如何解决它。编辑:我也没有遵循某种教程
  • 我的意思不是重写新应用程序,而只是在新的空项目上模拟工作 dbContext 并检查与您的差异。 docs.microsoft.com/aspnet/core/data/ef-mvc/…
  • 您好,我将检查可能的重复项,然后如果没有任何效果,请执行您的建议。完成后让你知道。我相信这可能需要我大约 30 分钟

标签: c# asp.net-mvc asp.net-core model-view-controller


【解决方案1】:

我找到了问题所在。使用 Visual Studio 创建新项目时。 如果您选择创建 Authentication ,它将在名为 Data 的文件夹中为您创建一个 dbcontext。碰巧这个文件也被称为 ApplicationDbContext 。出于巧合,我将其命名为相同。

我为解决该错误所做的是将我自己的 ApplicationDbContext 重命名为新名称并将其添加到服务中,它运行良好。我猜这是结构错误。

【讨论】:

    猜你喜欢
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多