2012-04-15 2 views
1

В asp.net mvc3 Я хочу иметь общий метод, который добавляет объект viewmodel в базу данных, откуда он отправляется в нужное место в базе данных. Для этого я пытаюсь перейти в опубликованную модель. Тем не менее, я немного затрудняюсь сделать это динамически. Я попытался это, но он не работает:Могу ли я публиковать динамическую модель?

вид:

(psuedo) 
begin form aiming at Add 
fields 
input type = submit 

действия контроллера

[HttpPost] 
public ActionResult Add(dynamic model,...) 

Вопрос заключается в том, что модель никогда не заполняется. Скрытые поля есть, но фактические поля, определенные моделью с помощью помощников, не входят в модель. Я понимаю, что просто называть его model более чем вероятно не будет выравниваться правильно. Я уверен, что если бы я сильно набрал модель, например (MyExplicitClass model,...), это сработало бы, но это победит динамический подход, потому что я хочу иметь возможность отправлять классы1, class2, class3, class5, class8, class13 и т. Д.

Есть ли любой способ заставить это работать в том, что независимо от того, что отправлено @model class21, dynamic model (или equiv) захватит этот объект?

ответ

2

Нет. По крайней мере, не используя нестандартное связующее.

У вас есть фундаментальное непонимание того, как работает привязка модели. Вы считаете, что привязка модели работает на основе @model в представлении. Это не может быть дальше от истины. Работа с привязкой к модели работает, просматривая параметры, указанные в методе действий.

Все моделирование связующего - это вид параметров, указанных для метода действия, а затем посмотрите на значения запроса (либо запрос или сообщение), либо попытайтесь их сопоставить. Если он находит совпадение, он создает объект.

Ключ здесь в том, что модельное связующее только создает объекты, указанные в параметрах метода действия. Какой объект является «динамическим»? Это не имеет понятия. Поэтому он не может создать какой-либо тип.

EDIT:

Вы можете найти этот вопрос полезный

Polymorphic model binding

+0

Что делать, если поставить фильтр, чтобы вывести и затем отливали тип? Может ли это работать? –

+0

@TravisJ - Фильтры (при условии, что вы имеете в виду атрибут) статически связаны во время компиляции. Они не будут работать во время выполнения, поэтому нет способа изменить фильтр во время выполнения. –

+0

Возможно использовать трамплин после привязки и выполнить его во время выполнения с копией динамического типа статического типа. –

Смежные вопросы