值不能为null计算模型属性MVC 5

时间:2014-07-09 15:57:14

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

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

这是我的模特:

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 这些属性仅按您所见的方式计算,不应具有值。

问题出现在我创建objekt并将其发布到数据库时。

1 个答案:

答案 0 :(得分:0)

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

  • 将有问题的属性转换为方法并重新计算代码 作为necesesary。
  • 使用仅包含所需属性的视图模型(推荐)
  • 使用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;
        }
    }
 }

这有帮助吗?