asp.net-core - 在 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)或更新所有记录,从我的角度来看效率低下。
将不胜感激任何建议!
解决方案
异常告诉你问题以及如何解决它:你不能绑定到一个IQueryable
,你需要类似的东西List<T>
:
[BindProperty]
public List<MyRecord> myRecordListQuery
无论如何,您真的不应该将 an 传递IQueryable
给您的视图。在您的代码隐藏中实现结果集。
推荐阅读
- facebook - Facebook 访问令牌 - 如何正确保护它?
- vba - 使用输入框值删除项目
- c# - .NET Google Action WebHook Fulfillment RegisterUpdate Intent
- javascript - 如何检查未定义的对象属性?
- nuget - 在我的 TeamCity 构建期间尝试恢复 nuget 包时出现错误:“NU3008:包完整性检查失败”
- google-analytics - 如何使用@redux-beacon/google-analytics 让多个跟踪器工作?
- android - 应用程序找不到外部服务 - 为什么会这样?
- jquery - 如何在 jquery 过滤器中使用选择选项的数据属性?
- javascript - NodeJS(后端)从 POST 调用接收数据,那么如何在 ReactJS(前端)中显示?
- python - discord.py 测试角色不起作用。总是返回 false