如何在 ASP.NET MVC Razor 中将数据绑定到布局模板
How to bind data to layout template in ASP.NET MVC Razor
我正在使用 ASP.NET MVC 5、Razor、EntityFramework 构建书店网站
我的实体
Category {
int CateID,
string CateName
}
Book {
int BookID,
int BookName
}
我的 _Layout.cshtml 有一个侧边栏(左侧菜单),它显示数据库中的所有类别(所有页面都相同)。
我有两个控制器:HomeController 和 BookController,这些控件的所有视图都会
使用上面的布局模板。
我想到了UserControl,我创建了一个UserControl name SideBarUserControl
@model List<Category>
@if (ModelCount > 0)
{
<ul>
foreach (var l in Model)
{
<li><a href="">@l.CateName</a></li>
}
</ul>
}
在 Home/Index 看来:
@Html.Partial("_SideBarUserControl")
但我不知道把它的绑定代码放在哪里。如果我有一个 BaseController 有用吗,它是 HomeController 和
BookController 从它扩展而来。
既然你在 _Layout.cshtml
中执行数据库调用,那么我建议使用 Ajax 来获取数据?
在你的 _Layout
中创建一个 Ajax 对任何控制器上的东西的调用,我会亲自将它放入 HomeController.cs
但这是我自己的偏好。
然后根据该调用的结果在您的分部视图中呈现数据。
这样您就不必等待任何数据库调用完成,缺点是边栏不会与您的 DOM 加载同时出现。但是你总是可以通过使用像 Spin.js
这样的东西让它看起来更友好
操作方法
[HttpPost]
public ActionResult GetCategories()
{
//Code to fetch the data for the partial
return PartialView("_SideBarUserControl", model);
}
Ajax 例子
$(function () {
$.ajax({
type: "POST",
url: '@Url.Action("GetCategories","Home")',
success: function (data) {
var result = data;
$('targetLocation').html(result);
}
});
});
这种方式是错误的!
ajax 在布局中调用使每次加载应用程序或每次打开页面时发生一个任务!!!
此方法可能有效,但不正确!
您需要在 mvc 核心中使用 viewComponent 或在 mvc 中使用部分视图并兑现。
我正在使用 ASP.NET MVC 5、Razor、EntityFramework 构建书店网站 我的实体
Category {
int CateID,
string CateName
}
Book {
int BookID,
int BookName
}
我的 _Layout.cshtml 有一个侧边栏(左侧菜单),它显示数据库中的所有类别(所有页面都相同)。 我有两个控制器:HomeController 和 BookController,这些控件的所有视图都会 使用上面的布局模板。 我想到了UserControl,我创建了一个UserControl name SideBarUserControl
@model List<Category>
@if (ModelCount > 0)
{
<ul>
foreach (var l in Model)
{
<li><a href="">@l.CateName</a></li>
}
</ul>
}
在 Home/Index 看来:
@Html.Partial("_SideBarUserControl")
但我不知道把它的绑定代码放在哪里。如果我有一个 BaseController 有用吗,它是 HomeController 和 BookController 从它扩展而来。
既然你在 _Layout.cshtml
中执行数据库调用,那么我建议使用 Ajax 来获取数据?
在你的 _Layout
中创建一个 Ajax 对任何控制器上的东西的调用,我会亲自将它放入 HomeController.cs
但这是我自己的偏好。
然后根据该调用的结果在您的分部视图中呈现数据。
这样您就不必等待任何数据库调用完成,缺点是边栏不会与您的 DOM 加载同时出现。但是你总是可以通过使用像 Spin.js
这样的东西让它看起来更友好操作方法
[HttpPost]
public ActionResult GetCategories()
{
//Code to fetch the data for the partial
return PartialView("_SideBarUserControl", model);
}
Ajax 例子
$(function () {
$.ajax({
type: "POST",
url: '@Url.Action("GetCategories","Home")',
success: function (data) {
var result = data;
$('targetLocation').html(result);
}
});
});
这种方式是错误的!
ajax 在布局中调用使每次加载应用程序或每次打开页面时发生一个任务!!!
此方法可能有效,但不正确!
您需要在 mvc 核心中使用 viewComponent 或在 mvc 中使用部分视图并兑现。