По моему мнению, наилучшей практикой было бы иметь одну модель представления для вашего вида, со свойством на нем, содержащим некоторый объект, который определяет, как формируется ваше динамическое меню. Пример:
public class MyViewModel
{
public int SomeData { get; set; } // basic Stuff
public IDynamicMenuData MenuData { get; set; }
}
Вы назначаете реализацию динамических данных меню для вашей модели представления на основе того, какое меню вы хотите отобразить для этого пользователя. Затем, по вашему мнению, вы можете вызвать:
@Html.DisplayFor(x => x.MenuData)
Где вы хотите ваше динамическое меню. Затем вы можете создать шаблон отображения для каждого типа реализации IDynamicMenuData, и он будет отображаться соответствующим образом. Тогда вам нужен только один вид, одна модель вида, и у вас может быть X реализаций вашего динамического меню.