MVC Razor Как получить модель в Controller на HttpPost, когда модель динамическая - PullRequest
0 голосов
/ 12 августа 2011

Я работаю над функцией в приложении, где модель будет динамической в ​​том смысле, что любые данные настроек могут быть отображены, и представление получит модель в зависимости от того, на какой вкладке они щелкнули.Я использую скрытое поле для хранения названия настроек, потому что они совпадают с названием модели.например, если tab1-> Settings1, то Model is Settings1 [уже существует в Model]. Поэтому я использовал @ model dynamic в View и использовал @ Html.EditotForModel () для рисования необходимого пользовательского интерфейса на основе модели.Моя проблема в том, что когда я выполняю HttpPost при редактировании, в настоящее время я использую FormCollection для чтения данных на этой странице, когда я объявляю имя модели в параметре, он мне его получает, но я не знаю, какая модель возвращается, кромепеременной Hidden, и мне это нужно, потому что проверка модели не работает из-за этой проблемы.Любая помощь или отзывы приветствуются?Я могу дать более подробную информацию, если требуется?Кто-нибудь сталкивался с этой проблемой раньше ??

1 Ответ

0 голосов
/ 13 октября 2011

Динамика может быть хорошей и плохой вещью.Лучше всего использовать их на моделях, имеющих общий интерфейс в управляемой усадьбе.

Существуют различные варианты, на которые вы можете посмотреть: 1) Вы пытались заставить метод действия принимать динамический тип?Это может быть самый простой способ.

Возможно, вам придется настроить помощник для приведения объекта к нужному типу на основе скрытого поля.

2) У меня есть похожая идея внекоторый код, но я создал класс viewmetamodel, который содержал все мои типы как обнуляемые свойства.Мой метод действия принимает этот тип viewmetamodel и проверяет свойства, которые не являются нулевыми.

В соответствии с этим, если ваши данные не слишком велики, вы можете загрузить все вкладки настроек и использовать Jquery, применяя вкладку при нажатии.

3) Вы также можете создать @sections или использовать EditorFor (c => c.settings) для каждой вкладки.Таким образом, каждая вкладка будет загружать тип безопасного объекта.Вам нужно создать контроллеры для каждого.

Я бы сказал, выберите самый простой способ для вас.Я надеюсь, что это, по крайней мере, дает вам некоторые идеи.

...