C# 具有导航属性的计算属性的对象的窗体 上下文

C# 具有导航属性的计算属性的对象的窗体 上下文,c#,asp.net-core,razor-pages,calculated-field,computed-properties,C#,Asp.net Core,Razor Pages,Calculated Field,Computed Properties,下面是一个模型类: public class HealthRecord { public int Id { get; set; } [DataType(DataType.Date)] public DateTime Date { get; set; } [DataType(DataType.Time)] public DateTime Time { get; set; } pub

下面是一个模型类:

    public class HealthRecord
    {
        public int Id { get; set; }

        [DataType(DataType.Date)]
        public DateTime Date { get; set; }

        [DataType(DataType.Time)]
        public DateTime Time { get; set; }

        public int FoodItemId { get; set; }

        public FoodItem FoodItem { get; set; } // navigation

        public decimal Amount { get; set; }

        public decimal Calories => FoodItem.Calories * Amount;
    }
请注意,以下是计算属性:

public decimal Calories => FoodItem.Calories * Amount;
而且
FoodItem
是一个导航属性

问题 如果我为新的
HealthRecord
对象填写创建表单:

然后按
Create
,我得到以下信息:

[ValidateNever]
public decimal Calories => FoodItem.Calories * Amount;

附注1 我在我的
HealthRecords
页面模型中的
CreateModel.OnPostAsync
上设置了一个断点。然而,它似乎甚至没有走那么远

附注2 由于某种原因,ASP.NET Core似乎正在尝试访问提交表单后产生的对象的
healthcrecord.carries
属性,但该对象上的
FoodItem
属性仍然为空(尽管设置了
FoodItemId

例如,如果我只是注释掉
HealthRecord
中的计算属性:

// public decimal Calories => FoodItem.Calories * Amount;
create表单可以工作

类似地,我们可以在
FoodItem
上添加一个空检查作为一种解决方法:

public decimal Calories => FoodItem != null ? FoodItem.Calories * Amount : 0;
问题: 上面的空检查似乎是一个乱七八糟的问题,应该没有必要

允许
carries
属性存在并且表单仍然正常工作的好方法是什么

项目 github上的整个项目:

HealthRecord
class:

HealthRecord
创建页面的页面模型:

更新 下面的评论建议如下:

[ValidateNever]
public decimal Calories => FoodItem.Calories * Amount;
是的,它看起来确实有效

此处提到了该属性:


很可能存在一个ignore属性,您可以应用该属性来告诉模型绑定器在生成POST数据时忽略该属性。我正在试图挖掘信息…好的,因为这似乎是验证名称空间,所以有一个名为
ValidateNever
的属性可以应用:-但是,我不确定绑定器是否仍会尝试将属性序列化为post数据的一部分,所以请先尝试添加此属性,看看效果如何。@Charleh,是的!我已经更新了这个问题,包括你的建议。@ Charleh,考虑添加一个贝宝或比特币地址到您的个人资料,以便我可以买你午餐。别担心,伙计,别担心午餐——我昨天去购物了:)