Модель MVC3 вместо модели ... не видно при публикации в контроллер - PullRequest
2 голосов
/ 14 января 2012

У меня есть модель заказа (показана ниже)

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, которая не идеальна и лучше запутана.

Жду ответов

Стив

Ответы [ 2 ]

1 голос
/ 14 января 2012

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/

Это мой первый пост (под моей учетной записью), и мне действительно приятно участвовать .. !!

0 голосов
/ 14 января 2012

Вы должны применить ForeignAttribute к свойству ProductSelection, которое указывает первичный ключ класса ProductSelection:

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

Надеюсь, что это поможет.

...