Helpers - компьютеры, интернет, программирование

Использование связывателей моделей asp.net mvc в целом

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

<input type="text" name="model.DerivedTypeSpecificField" />
<input type="hidden" name="modelType" value="MyDerivedType" />

При этом для связывания моделей asp.net mvc, похоже, требуется конкретный тип, который они будут создавать, по этой причине мне нужно было бы создать другой контроллер для каждого производного типа.

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

Спасибо!


Ответы:


1

Не знаю, сработает ли это, но вы можете попробовать что-то вроде:

public class MyBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        bindingContext.ModelType = System.Type.GetType(controllerContext.HttpContext.Request["modelType"]);

        return base.BindModel(controllerContext, bindingContext);
    }
}

Это просто смена привязки базовой модели.

14.11.2009
  • Я понял. Мое решение почти идентично вашему, за исключением того, что я беру modelType из массива ValueProviders. Спасибо! 14.11.2009

  • 2

    Ознакомьтесь с ModelBinder производного типа в MvcContrib. Это позволяет вам выполнять привязку модели к производным типам с помощью процесса «штамповки типов», который выполняется автоматически при использовании помощника RenderTypedPartial (...). Партиалы MvcContrib поддерживают состояние привязки между частями, поэтому префиксы Name / Id должным образом поддерживаются на глубоком графе объекта. Если вы используете другие механизмы, такие как шаблоны, вам придется самостоятельно обрабатывать штамповки. Это объясняется на странице документации.

    Возвращаясь к вашим вопросам и тому, как производные типы разрешаются с помощью ModelBinder, вы можете зарегистрировать вариации производных типов с атрибутами в механизме, аналогичном WCF KnownTypeAttribute, или вы можете выполнить регистрацию при запуске. В любом случае эти изменения регистрируются один раз и сохраняются для оценки производительности.

    Связывание модели также решает эту проблему таким образом, чтобы не мешать атрибутам аннотации / проверки данных. Они будут работать так, как вы от них ожидаете, в любом другом сценарии.

    11.05.2010
    Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

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

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..