ASP.NET Core Razor PageModel ModelState无效,因为具有ID == 0的新导航属性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET Core Razor PageModel ModelState无效,因为具有ID == 0的新导航属性相关的知识,希望对你有一定的参考价值。
我正在尝试从html表单更新可能具有可选NavigationProperty的实体。
public class ProcessDataGroup
public int Id get; set;
public string Name get; set;
public ReadDataGroupStrategy ReadDataGroupStrategy get; set;
public ReadBlockDefinition ReadBlockDefinition get; set;
public int? ReadBlockDefinitionId get; set;
public class ReadBlockDefinition
public int Id get; set;
public string Address get; set;
public int Length get; set;
public int Offset get; set;
如果ReadBlockDefinition
已经存在并且具有Id > 0
,则可以使用。我将实体附加到我的DbContext
,它将被更新。但是有可能以html形式更改了ReadDataGroupStrategy
,然后创建了一个新的ReadBlockDefinition
,默认情况下,其默认Id
为0。在这种情况下,ModelState.IsValid
将在调试过程中返回错误和调查结果,发现它抱怨ReadBlockDefinition.Id
字段,因此似乎在此处不会接受0。我无法从ReadBlockDefinition
ViewModel跳过Id字段,因为它对于更新至关重要。
目前我的解决方法是
if(ProcessDataGroup?.ReadBlockDefinition?.Id == 0)
ModelState.Remove("ProcessDataGroup.ReadBlockDefinition.Id");
在评估ModelState.IsValid
之前,但这对我来说似乎是一个很奇怪的解决方案。我通常不确定为什么验证首先会失败。到目前为止,据我所知,验证与EF Core或任何底层技术无关,0应该是一个完全有效的整数。
任何想法如何克服这个问题?还是ModelState.Remove(...)
方法是预期的方法?
您是否考虑过为ID设置数据注释?
public class ReadBlockDefinition
[Key]
public int Id get; set;
public string Address get; set;
public int Length get; set;
public int Offset get; set;
https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/data-annotations
以上是关于ASP.NET Core Razor PageModel ModelState无效,因为具有ID == 0的新导航属性的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core Razor 页面与完整 MVC Core [关闭]
Asp.net core razor pages 加载部分页面
Asp.Net Core 上的 Razor 页面 - 添加了 Razor 页面但无法让页面显示