Связывание моделей и обобщение - PullRequest
0 голосов
/ 24 июня 2011

У меня есть модель, где ClassC наследуется от classB.

ClassB

int b1
строка b2

ClassC: ClassB

bool c1
int c2
строка c3

Мой взгляд связан с ClassB.Когда я заполняю данные модели в первый раз, я назначаю экземпляр ClassC переменной ClassB из-за необходимости бизнеса и затем отправляю его для просмотра.Потому что ClassC - это, в конце концов, ClassB.

На мой взгляд, мне нужно проверить значение свойства c1 и сделать div видимым / невидимым соответственно.Поэтому я обращаюсь к этому свойству по следующему коду

(Модель как ClassC) .c1

Это работает нормально, но только в первый раз.Когда я отправляю свою страницу, параметр контроллера принимает модель типа ClassB.

public virtual ActionResult Save(ClassB classb)

Но когда я пытаюсь получить доступ к тому же свойству здесь, тот же код выдает ошибку приведения типа.В идеале, не должен ли параметр ClassB содержать экземпляр ClassC, который был ему присвоен при заполнении представления?Это не дает никакой ошибки в виду!Внутри модель связывает что-то не так?Как я могу получить это свойство в моем контроллере в этом случае?Любые предложения, пожалуйста?спасибо ..

1 Ответ

0 голосов
/ 24 июня 2011

Внутреннее связующее модель делает что-то не так?

Ни один ModelBinding не делает именно то, для чего обучен.Задача ModelBinder примерно состоит в том, чтобы получить параметры действия и заполнить их из разных источников (сообщение Fomr, JSON, словарь маршрута и т. Д.).Поскольку параметром вашего метода действия является ClassB, который не содержит свойств (методов и полей) ClassC, поэтому он не будет заполнять эти свойства.Более того, если вы хотите получить доступ к ClassC в вашем методе действия, вы должны изменить его на

public virtual ActionResult Save(ClassC classc)
{
}

и, как вы сказали, вы используете свойство ClassC (c1) просто для того, чтобы показать / скрыть div настр.но если вы хотите, чтобы свойства Classc были привязаны к модели, вы должны поместить их в поля формы (input, select, checkbox и т. д.), чтобы они отправлялись с запросом при отправке формы.

В идеалене должен ли параметр ClassB содержать экземпляр ClassC, который был ему присвоен при заполнении представления?

Нет, это не должно происходить, потому что когда представление отображается и html доставляется пользователю, все (Model, RequestContext и т. Д.) Исчезает, а когда вы отправляете форму, это совершенно новый запрос ине должен содержать значения модели из предыдущих запросов.Значения ClassB, как вы видите в своем методе действия, не получены из предыдущего запроса.это скорее связано с вашими параметрами действия связывателем модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...