In my opinion, it would be best practice to have one presentation model for your presentation, and the property on it contains some object that determines how your dynamic menu is formed. Example:
public class MyViewModel { public int SomeData { get; set; }
You assign the implementation of the dynamic menu data to your view model based on which menu you want to display for this user. Then, in your opinion, you can call:
@Html.DisplayFor(x => x.MenuData)
Where you want to use your dynamic menu. You can then create a display template for each type of implementation of IDynamicMenuData, and it will be displayed accordingly. Then you only need one view, one view model, and you can have X number of implementations of your dynamic menu.
source share