如何在 MVC 中的 _Layout.cshtml 中显示来自 SQL 数据库的数据
How to show data from SQL database in _Layout.cshtml in MVC
我正在开发一个 MVC OnlineShop 项目,我在 SQL server
中创建了类别和产品 数据库,现在我想要在网络主页上显示来自该数据库的类别。我在创建 session 并在 _Layout.cshtml
中调用此 session 之前尝试过,但我发现 session 虽然可行,但在主页上显示类别并不是一个好主意,因为会话主要用于 cookies...
问题:这是正确的方法吗?或者有更好的主意吗?
我在 Homecontroller.cs
中写了这个:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MVCOnlineShop.Models;
namespace MVCOnlineShop.Controllers
{
public class HomeController : Controller
{
OnlineStoreEntities storeDB = new OnlineStoreEntities();
//
// GET: /Home/
public ActionResult Index()
{
var Categories = storeDB.Categories.ToList();
return View(Categories);
}
//
// GET: /Home/Browse
public ActionResult Browse(string Category)
{
// Retrieve Category and its Associated Products from database
var CategoryModel = storeDB.Categories.Include("Products")
.Single(g => g.CategoryName == Category);
return View(CategoryModel);
}
//
// GET: /Home/Details
public ActionResult Details(int id)
{
var Product = storeDB.Products.Find(id);
return View(Product);
}
//
// GET: /Home/Browse?Category=Games
}
}
并在 Views/Home
中创建了一个 PartialView,名为 CategoryLayout.cshtml
:
@model IEnumerable<MVCOnlineShop.Models.Category>
@{
ViewBag.Title = "Categories";
}
<ul>
@foreach (var Category in Model)
{
<li>
@Html.ActionLink(Category.CategoryName,
"Browse", new { Category = Category.CategoryName })
</li>
}
</ul>
并在我的 _Layout.cshtml
中写下:
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<div class="dropdown">
<button class="dropbtn">@Html.Partial("CategoryLayout")</button>
<div class="dropdown-content">
<a href="#">Link 1</a>
<a href="#">Link 2</a>
<a href="#">Link 3</a>
</div>
</div>
</ul>
}
首先
编辑
- 创建一个 return 局部视图
的 Action 方法
不要对return局部视图使用索引,因为异步调用需要局部视图,写一个新的Action。
public ActionResult GetCategories ()
{
var Categories = storeDB.Categories.ToList();
return PartialView("CategoryLayout",Categories );
}
以上代码将使用 Categories 模型渲染部分视图,并将发送回布局视图。
在布局页面而不是
@Html.Partial("CategoryLayout")
使用
@Html.RenderAction("GetCategories","Home")
完成!!!
我正在开发一个 MVC OnlineShop 项目,我在 SQL server
中创建了类别和产品 数据库,现在我想要在网络主页上显示来自该数据库的类别。我在创建 session 并在 _Layout.cshtml
中调用此 session 之前尝试过,但我发现 session 虽然可行,但在主页上显示类别并不是一个好主意,因为会话主要用于 cookies...
问题:这是正确的方法吗?或者有更好的主意吗?
我在 Homecontroller.cs
中写了这个:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MVCOnlineShop.Models;
namespace MVCOnlineShop.Controllers
{
public class HomeController : Controller
{
OnlineStoreEntities storeDB = new OnlineStoreEntities();
//
// GET: /Home/
public ActionResult Index()
{
var Categories = storeDB.Categories.ToList();
return View(Categories);
}
//
// GET: /Home/Browse
public ActionResult Browse(string Category)
{
// Retrieve Category and its Associated Products from database
var CategoryModel = storeDB.Categories.Include("Products")
.Single(g => g.CategoryName == Category);
return View(CategoryModel);
}
//
// GET: /Home/Details
public ActionResult Details(int id)
{
var Product = storeDB.Products.Find(id);
return View(Product);
}
//
// GET: /Home/Browse?Category=Games
}
}
并在 Views/Home
中创建了一个 PartialView,名为 CategoryLayout.cshtml
:
@model IEnumerable<MVCOnlineShop.Models.Category>
@{
ViewBag.Title = "Categories";
}
<ul>
@foreach (var Category in Model)
{
<li>
@Html.ActionLink(Category.CategoryName,
"Browse", new { Category = Category.CategoryName })
</li>
}
</ul>
并在我的 _Layout.cshtml
中写下:
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<div class="dropdown">
<button class="dropbtn">@Html.Partial("CategoryLayout")</button>
<div class="dropdown-content">
<a href="#">Link 1</a>
<a href="#">Link 2</a>
<a href="#">Link 3</a>
</div>
</div>
</ul>
}
首先
编辑
- 创建一个 return 局部视图 的 Action 方法
不要对return局部视图使用索引,因为异步调用需要局部视图,写一个新的Action。
public ActionResult GetCategories ()
{
var Categories = storeDB.Categories.ToList();
return PartialView("CategoryLayout",Categories );
}
以上代码将使用 Categories 模型渲染部分视图,并将发送回布局视图。
在布局页面而不是
@Html.Partial("CategoryLayout")
使用
@Html.RenderAction("GetCategories","Home")
完成!!!