2012-04-04 1 views
12

Мне интересно, есть ли способ использовать встроенную привязку модели, похожую на внутреннюю привязку модели, которая возникает перед действием контроллера.Ручная привязка модели с .Net Mvc

Моя проблема заключается в том, что я хочу иметь возможность контролировать привязку, поскольку я не буду знать тип объекта для привязки, пока я не нахожусь в контексте действия контроллера.

Я понимаю, я могу наследовать DefaultModelBinder выполнять пользовательские привязки, но я доволен тем, что уже на предложение, и вы хотите использовать его - принять этот идеальный пример, чтобы получить представление о том, что я после :

public ActionResult DoCustomBinding(string modelType) 
{ 
    ... // logic to determine type to check and create strong 'actual' type 

    object model = BindModel(actualType); 

    ... // do something with bound model 

    return View(); 
} 

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

+0

Вы правы. Это плохое поведение на таком полезном сайте, я дал мне полное отключение. –

+0

Я постараюсь и уточню, моя конечная цель - уметь проверять одно свойство класса, украшенного атрибутами проверки. Итак, вооруженный только строковым именем проверяемого типа, имя (имена) поля и значение (ы) - я хотел бы иметь возможность привязать модель (которую мне нужно будет использовать из этого типа), тогда выполните проверки. –

+0

Я собираюсь посмотреть вокруг ControllerActionInvoker http://aspnet.codeplex.com/SourceControl/changeset/view/72551#266452, похоже, это может дать мне представление о том, как это делается внутри. –

ответ

0

Вы изучали интерфейс IModelBinder?

public class CustomModelsBinder : IModelBinder { 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { } 
} 

А затем добавьте в файл global.asax:

protected override void OnApplicationStarted() { 
    ModelBinders.Binders.Add(typeof(CustomModels), new CustomModelsBinder()); 
} 
+0

Не совсем, и я уже использую нечто похожее на работу с перечислениями. Я хочу использовать внутренний движок и, скажем, тип, который я хочу создать и связать, перейдите к нему и привяжите его и верните результат (вне обычной процедуры действия контроллера). –

0

Если вы хотите проверить только определенные части модели, это может быть дубликатом вопрос, который я ранее ответил MVC Partial Model Updates.

Прохладная часть об использовании System.ComponentModel.DataAnnotations.MetadataType заключается в том, что связующее устройство будет привязываться к производному объекту, который в основном такой же, как базовый объект, только с различными метаданными отображения/валидации.

+0

Спасибо - это выглядит полезно, мне только удалось получить привязку, поэтому у меня есть несколько решений, на которые я могу смотреть сейчас ... –

9

Если кто-то попадается этот вопрос от Google, как я сделал здесь ответ: How to gain control over model binding?

Короче говоря: TryUpdateModel является метод, который вы ищете.

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

  • Нет связанных вопросов^_^