首页 > 解决方案 > 在 onPost 方法中使用 IQueryable

问题描述

在我的 .net-core 项目中,我试图编辑我使用 LINQ 从 DB 查询的数据列表。

我可以在表格中显示这个数据,没问题,但是一旦我点击“提交”数据,我得到以下异常:

“模型绑定的复杂类型不能是抽象类型或值类型,并且必须具有无参数构造函数。”

我的 IQueryable 设置为 null

所以,我有一堂课,比如说

class MyRecord
{
  [Key]
  public int recordID {get; set;}

  public int recordType {get; set;}

  public String recordName {get; set;}
}

然后我创建 IQueryable 列表:

[BindProperty]
public IQueryable<MyRecord> myRecordListQuery

并从数据库中选择记录列表

myRecordListQuery = (from r in _context.RecordTable
                     where r.recordType == 0
                     select r);

所以,到这里它工作正常,我得到了我的记录集,并且可以在 Razor 页面(不是 MVC!)中使用它们,比如创建一个 HTML 表并以以下形式使用我的结果:

<td>
<input asp-for="@Model.myRecordListQuery.Skip(i).First().recordName" class="form-control" />
</td>

因此,记录可以正确显示并且可以进行编辑。

问题是,当我提交表单时,我得到了上面写的异常......

ps 如果我使用 List 而不是 IQueryable,它会在 post 方法上返回正确的数据,但是更新数据库并不是那么容易 - 我需要比较值(was / is)或更新所有记录,从我的角度来看效率低下。

将不胜感激任何建议!

标签: asp.net-core.net-core

解决方案


异常告诉你问题以及如何解决它:你不能绑定到一个IQueryable,你需要类似的东西List<T>

[BindProperty]
public List<MyRecord> myRecordListQuery

无论如何,您真的不应该将 an 传递IQueryable给您的视图。在您的代码隐藏中实现结果集。


推荐阅读