Introduction
I am going to make a few assumptions because I do not have all the information.
I suspect you want to create something like this:

Separation views
When you encounter the problem of “How can I put everything in one controller / view mode”, it is possible that it does too much and needs to be split.
Do not view your last page as one big idea - divide the submission into smaller ones so that they do the “one thing”.
For example, navigation is just one part of your layout. You could go even further to say that each drop-down menu is one view that is part of the navigation, and so on.
Navigation Overview
Suppose you have _Layout.cshtml that looks like this:
<body> <div class="navbar"> <ul class="nav"> <li><a href="#">Products</a></li> <li><a href="#">Recipes</a></li> </ul> </div> @RenderBody() </body>
As you can see, we have a simple navigation system, and then the main building is created. The problem we are facing is this: how do we extract this navigation and provide it with the models needed for rendering?
Retrieving Navigation
Let the navigation be extracted in your own view. Take the HTML navigation code and paste it into a new view named __Navigation.cshtml_ and place it under ~/Views/Partials .
_Navigation.cshtml
<div class="navbar"> <ul class="nav"> <li><a href="#">Products</a></li> <li><a href="#">Recipes</a></li> </ul> </div>
Create a new controller named PartialsController . Create a new action to invoke our navigation.
PartialsController.cs
[ChildActionOnly] public class PartialsController : Controller { public ActionResult Navigation() { return PartialView("_Navigation"); } }
Refresh our layout to trigger navigation.
_Layout.cshtml
<body> @Html.Action("Navigation", "Partials") @RenderBody() </body>
Now our navigation is divided into a partial view. It is more independent and modular, and now it is much easier to give it model data for work.
Input Model Data
Suppose we have several models, such as the ones you mentioned.
public class Product {
Create a view model:
NavigationViewModel.cs
public class NavigationViewModel { public IEnumerable<Product> Products { get; set; } public IEnumerable<Recipe> Recipes { get; set; } }
Fix our action:
PartialsController.cs
public ActionResult Navigation() { NavigationViewModel viewModel; viewModel = new NavigationViewModel(); viewModel.Products = db.Products; viewModel.Recipes = db.Recipes; return PartialView("_Navigation", viewModel); }
Finally, refresh our view:
_Navigation.cshtml
@model NavigationViewModel <div class="navbar"> <ul class="nav"> @foreach (Product product in Model.Products) { @<li>product.Name</li> } @foreach (Recipe recipe in Model.Recipes) { @<li>recipe.Name</li> } </ul> </div>