You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC报错:找不到定义且无可用扩展方法

ASP.NET MVC "找不到定义且无可用扩展方法" 错误解决

问题场景

开发ASP.NET MVC应用时,出现“找不到定义且无可用扩展方法”的编译错误,无法正常获取数据库表数据并展示。相关代码如下:

1. 数据上下文模型 ProfileCreationContext

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.EntityFrameworkCore;
using System.IO;
using Microsoft.Data.SqlClient;
using System.Data;

namespace CRUD_Profile_Creation.Models
{
    public class ProfileCreationContext : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json");
            var configuration = builder.Build();
            optionsBuilder.UseSqlServer(configuration["ConnectionStrings:UserProfile"]);
        }

        SqlConnection con = new SqlConnection("Data Source=DESKTOP-HDBEK6R;Initial Catalog=Bottleneckv1;Integrated Security=True");

        public DbSet<ProcessUnit> ProcessUnit { get; set; }
    }
}

2. 实体模型 ProcessUnit

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Threading.Tasks;

namespace CRUD_Profile_Creation.Models
{
    public class ProcessUnit
    {
        public string ProcessUnitID { get; set; }   
        public string ProcessUnitName { get; set;}
        public int ProcessTypeID { get; set;}
        public string InventoryName { get; set;}
        public string CumM { get; set;}
        public string PerdayM { get; set;}
        public string TotalM { get; set; }
       
    }
}

3. 错误的控制器代码 ProcessUnitController

using CRUD_Profile_Creation.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace CRUD_Profile_Creation.Controllers
{
    public class ProcessUnitController : Controller
    {
        private ProfileCreationContext db = new ProfileCreationContext();
        public IActionResult Index()
        {
            ViewBag.processUnitID = db.ProcessUnitID.ToList();
            ViewBag.processUnitID = db.ProcessUnitName.ToList();
            ViewBag.processUnitID = db.ProcessTypeID.ToList();
            ViewBag.processUnitID = db.InventoryName.ToList();
            ViewBag.processUnitID = db.CumM.ToList();
            ViewBag.processUnitID = db.PerdayM.ToList();
            ViewBag.processUnitID = db.TotalM.ToList();
            return View();
        }
    }
}

错误原因

控制器代码存在两个核心问题:

  1. 属性访问错误:ProfileCreationContext中仅定义了DbSet<ProcessUnit> ProcessUnit,并无ProcessUnitID、ProcessUnitName等直接属性,直接调用db.ProcessUnitID会触发“找不到定义”的错误。
  2. 逻辑赋值错误:多次将不同数据赋值给同一个ViewBag.processUnitID,最终仅会保留最后一次赋值结果,完全不符合展示所有字段数据的需求。

修正后的控制器代码

正确做法是通过DbSet获取整个实体集合,再传递给视图。以下是修正后的示例代码(以DenoProfileController为例,可根据自身业务实体调整):

public class DenoProfileController : Controller
{
    private ProfileCreationContext db = new ProfileCreationContext();

    public IActionResult Index()
    {
        ViewBag.denoprofile = db.DenoProfile.ToList();         
        return View();
    }
}

若需展示ProcessUnit的数据,对应控制器代码应修改为:

public class ProcessUnitController : Controller
{
    private ProfileCreationContext db = new ProfileCreationContext();
    public IActionResult Index()
    {
        // 获取ProcessUnit表所有数据
        var processUnits = db.ProcessUnit.ToList();
        // 将集合传递给视图,也可通过ViewBag传递
        return View(processUnits);
    }
}

内容的提问来源于stack exchange,提问作者Illyiana Yusof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:11:07