2

我有一个订单模型(如下所示)

public class Order
    {
        //[Key]
        [ScaffoldColumn(false)]
        public int OrderId { get; set; }

        [DisplayName("Order Date")]
        public DateTime OrderDate { get; set; }

        public virtual ProductSelection ProductSelection { get; set; }

        public virtual ShippingDetails ShippingDetails { get; set; }

        public virtual BillingDetails BillingDetails { get; set; }

        public virtual CardDetails CardDetails { get; set; }

        public virtual AccountUser AccountUsers { get; set; }
    }

如您所见,它由一组其他模型组成,例如 ProductSelection(如下所示)。

public class ProductSelection
    {
        public int SimulatorId { get; set; }

        public string VersionNumber { get; set; }

        [DisplayName("Quantity")]
        public int Quantity { get; set; }

        [DisplayName("Total Price")]
        [ScaffoldColumn(false)]
        public decimal TotalPrice { get; set; }
    }

我遇到的问题是,当我发布到具有 Order 参数的控制器时,我无法从子模型中获取任何值(例如 Order.ProductSelection.SimulatorId。)

任何想法为什么这不起作用,因为我目前必须使用 FormCollection,这并不理想而且更混乱。

期待回复

史蒂夫

4

2 回答 2

1

1)愚蠢的问题,但只是为了确保....您是否在视图上保留子模型的值(在隐藏或任何其他输入类型的表单中,确保隐藏的名称与您在模型)或在查询字符串中。在为您提供完全加载的模型之前,模型绑定器会查看加载模型的不同位置,例如表单集合、路由数据和查询字符串您在控制器操作上加载了值。
基础知识.. http://dotnetslackers.com/articles/aspnet/Understanding-ASP-NET-MVC-Model-Binding.aspx

2)您的示例模型看起来不错,但请确保您的子模型的所有属性都具有公共访问修饰符,并且它们必须在其属性声明中设置。--->我之前遇到过同样的问题,因为我在这些属性上设置了私有访问修饰符,我浪费了一整天的时间来解决这个问题。

3)如果没有任何效果(希望不是这种情况),那么最后你可以编写自己的模型活页夹。如果您决定朝那个方向前进,这是一篇好文章 http://buildstarted.com/2010/09/12/custom-model-binders-in-mvc-3-with-imodelbinder/

这是我的第一篇文章(在我的帐户下),参与的感觉真的很好..!!

于 2012-01-14T18:48:15.073 回答
0

ProductSelection您应该在指向类主键的属性上应用 ForeignAttribute ProductSelection

[ForeignKey("SimulatorId")]
public virtual ProductSelection ProductSelection { get; set; }

希望有帮助。

于 2012-01-13T22:29:18.610 回答