【问题标题】:Value Cannot be null calculated model properties MVC 5 [closed]值不能为空计算模型属性 MVC 5 [关闭]
【发布时间】:2014-07-09 15:57:13
【问题描述】:

我的 MVC 应用程序中有一个模型,其中包含 som 属性和 som 计算属性。当我尝试将模型的新对象发布到数据库时,我收到一个错误,即我的计算属性不能为空。

这是我的模型:

public class OrderItem
        {

            public int orderItemId { get; set; }

            [DataType(DataType.MultilineText)]
            public string orderItemDescr { get; set; }

            public string orderItemText { get; set; }

            public double orderItemFixeedPrice { get; set; }

            public virtual Order orderItemOrder { get; set; }
            public virtual OrderItemType orderItemType { get; set; }

            public virtual ICollection<Time> orderItemTime { get; set; }
            public virtual ICollection<Material> orderItemMaterial { get; set; }

            public OrderItem ()
            { }

            public OrderItem (Order order)
            {
                this.orderItemOrder = order;
            }

            public string orderItemTypeDescr
            {
                get
                {
                    return (this.orderItemType.orderItemTypeNumber.ToString() + " - " + orderItemDescr);
                }
            }

            public double orderItemMaterialSum
            {
                get
                {
                    return orderItemMaterial.Sum(m => m.materialItmPrice * m.materialItem);
                }
            }

            public double orderItemTimeCount
            {
                get
                {
                    return orderItemTime.Sum(t => t.timeItem);
                }
            }

            public double orderItemTimeSum
            {
                get
                {
                    return orderItemTime.Sum(t => t.timePrice * t.timeItem);
                }
            }

            public double orderItemSum
            {
                get
                {
                    return orderItemTimeSum + orderItemMaterialSum;
                }
            }
        }

属性上显示错误:orderItemMaterialSum、orderItemTimeCount、orderItemTimeSum 这些属性仅按您所见计算,不应有值。

只有当我创建一个对象并将其发布到数据库时才会出现问题。

【问题讨论】:

  • 您收到的确切异常+消息是什么?如果您使用 ORM 来持久化数据,是哪一个?

标签: c# asp.net-mvc model-view-controller asp.net-mvc-5


【解决方案1】:

错误的原因是您的属性是双精度的,因此不能为空。想到了三种解决问题的方法:

  • 将有问题的属性转换为方法并重构您的代码 根据需要。
  • 使用仅包含您需要的属性的视图模型(推荐)
  • 使用 bind 属性指定在发布模型时如何进行绑定 (link)

最佳做法是使用视图模型。您的视图模型可能如下所示:

 public class OrderItemViewModel
 {
    public int orderItemId { get; set; }

    [DataType(DataType.MultilineText)]
    public string orderItemDescr { get; set; }

    public string orderItemText { get; set; }

    public double orderItemFixeedPrice { get; set; }

    public virtual Order orderItemOrder { get; set; }

    public virtual OrderItemType orderItemType { get; set; }

    public virtual ICollection<Time> orderItemTime { get; set; }

    public virtual ICollection<Material> orderItemMaterial { get; set; }

    public string orderItemTypeDescr
    {
        get
        {
            return this.orderItemType.orderItemTypeNumber.ToString() + " - " + this.orderItemDescr;
        }
    }
 }

这有帮助吗?

【讨论】:

  • 我将属性更改为方法并解决了我的问题。我尝试使用 ViewModels,但我认为我必须阅读更多关于 ViewModels 的信息......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 2015-10-17
  • 2017-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多