如何在 mvc 中对两个控制器使用预先加载?
How to use eager loading for two controllers in mvc?
我有两个模型和它们的表格。餐厅:
public int Id { get; set; }
public string Name { get; set; }
public string Location { get; set; }
public string Image { get; set; }
[InverseProperty("Restaurant")]
[InverseProperty("Restaurant")]
public ICollection<Menu> Menus { get; set; }
和菜单:
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public string Image { get; set; }
public int RestaurantId { get; set; }
public virtual Restaurant Restaurant { get; set; }
并且我使用 EntityFramework 和视图创建了控制器。我有显示餐厅列表的餐厅索引视图,并且每个餐厅信息中都必须有菜单按钮。我还有显示菜单项的菜单索引视图。现在我的问题是显示与特定餐厅相关的菜单项。
RestaurantIndex 行动结果:
public ActionResult Index()
{
var restaurants = db.Restaurants;
return View(restaurants.ToList());
}
菜单索引操作结果:
public ActionResult Index()
{
var menus = db.Menus.Include(m => m.Restaurant);
return View(menus.ToList());
}
我的餐厅列表:
enter image description here
它是菜单:
but it shows all items
我搜索了有关预加载的信息,但找不到类似的示例。谁能告诉我如何实现它?
通过查看您拥有的 'images' 代码。我会简单地将餐厅的 Id
作为可为空的 int?
传递到 MenuController 的 Index
中,例如:
public ActionResult Index(int? restaurantId = null)
{
List<Menu> menus = new List<Menu>();
if(menuId != null){
menus = db.Menus.Include(m => m.Restaurant).Where(x => RestaurantId == restaurantId);
}
else{
menus = db.Menus.Include(m => m.Restaurant)
}
return View(menus.ToList());
}
然后上面我们在控制器而不是视图中针对餐厅 ID 进行过滤。
在菜单视图中,您不必更改到目前为止所做的任何事情。
通过将 ID 作为可为 null 的参数,可以使用或不使用 ID 调用此 Index
方法。
我有两个模型和它们的表格。餐厅:
public int Id { get; set; } public string Name { get; set; } public string Location { get; set; } public string Image { get; set; } [InverseProperty("Restaurant")] [InverseProperty("Restaurant")] public ICollection<Menu> Menus { get; set; }
和菜单:
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public string Image { get; set; }
public int RestaurantId { get; set; }
public virtual Restaurant Restaurant { get; set; }
并且我使用 EntityFramework 和视图创建了控制器。我有显示餐厅列表的餐厅索引视图,并且每个餐厅信息中都必须有菜单按钮。我还有显示菜单项的菜单索引视图。现在我的问题是显示与特定餐厅相关的菜单项。 RestaurantIndex 行动结果:
public ActionResult Index() { var restaurants = db.Restaurants; return View(restaurants.ToList()); }
菜单索引操作结果:
public ActionResult Index()
{
var menus = db.Menus.Include(m => m.Restaurant);
return View(menus.ToList());
}
我的餐厅列表: enter image description here 它是菜单: but it shows all items 我搜索了有关预加载的信息,但找不到类似的示例。谁能告诉我如何实现它?
通过查看您拥有的 'images' 代码。我会简单地将餐厅的 Id
作为可为空的 int?
传递到 MenuController 的 Index
中,例如:
public ActionResult Index(int? restaurantId = null)
{
List<Menu> menus = new List<Menu>();
if(menuId != null){
menus = db.Menus.Include(m => m.Restaurant).Where(x => RestaurantId == restaurantId);
}
else{
menus = db.Menus.Include(m => m.Restaurant)
}
return View(menus.ToList());
}
然后上面我们在控制器而不是视图中针对餐厅 ID 进行过滤。
在菜单视图中,您不必更改到目前为止所做的任何事情。
通过将 ID 作为可为 null 的参数,可以使用或不使用 ID 调用此 Index
方法。