Есть много вариантов для обработки этого, но мы нашли один очень простой способ справиться с этим, который не требует перестройки всего приложения.
У нас были аналогичные проблемы, когда наша страница / частичное имеет четко определенный тип ViewData.Model, но представление содержит частичное, которое повторно используется на нескольких страницах. Мы также старались избегать использования ViewDataDictionary.
Однако мы обнаружили, что именно тот случай, который вы описываете, является сценарием EXACT, в котором нам нравится использовать запись ViewDataDictionary. Мы сохраняем статический класс Constants в нашей модели приложения, который содержит внутренние классы для каждого типа констант, включая ключи ViewData, чтобы у нас не было строк для этих вещей, плавающих повсюду.
Затем наше действие Controller заполняет ключ ViewData и частичное внутри другой страницы / частичное проверяет существование этого ключа и использует его вместо ViewData.Model. Это делает частичную работу везде, где это необходимо, и поддерживает вашу ViewModel в чистоте. Используя константы, мы везде избегаем необработанных строк.