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,考虑添加一个贝宝或比特币地址到您的个人资料,以便我可以买你午餐。别担心,伙计,别担心午餐——我昨天去购物了:)