我有一个标准的ASP.Net模板,它有一个生成菜单的_Layout。我有多个数据上下文代表我的应用程序中的不同数据库,一切正常。
我想在_Layout中的一个项目旁边添加一个计数作为引导徽章。为此,我需要传入db.TicketDal.Count()。直接在布局中执行此操作的最佳方法是什么。我确实尝试从家庭控制器传递ViewBag条目中的数据,但是当我转到不显示的不同控制器时。我可以修改每个控制器,但这似乎是错误的方法。我怀疑我是在推翻这个,但任何建议都会受到赞赏。
答案 0 :(得分:0)
您必须创建BaseController
。在那里你可以得到var TicketCount = db.TicketDal.Count();
或者一些List<MenuItems>
,并且任何其他控制器都必须从BaseController
继承,所以在任何一个和它们的任何方法中你都会有{的同一个实例{ {1}}或List<MenuItems>
或者你可以创建一个助手类。
TicketCount
并随处致电:public static class BaseKnowledgeHelper
{
public static int GetTicketCount()
{
return db.TicketDal.Count();
}
}
答案 1 :(得分:0)
我将在类似的帖子上提出我的建议。
我不会创建BaseController
,这会每次加载和查询数据库(可能没问题),UI
线程依赖于数据库调用。
我要做的是实施Ajax
来获取此信息,然后将其放在_Layout
Acton方法
public ActionResult GetTicketCount()
{
//Code to fetch the data for the count
return Json(count, JsonRequestBehavior.AllowGet);
}
视图上的Ajax
$(function () {
$.ajax({
type: "GET",
url: '@Url.Action("GetTicketCount","WhatEverController")',
success: function (data) {
// You can now do something with the data which contains the count
// e.g. Find the div where the count is suppose to be and insert it.
}
});
});
这样您就不必等待任何数据库调用完成,缺点是计数不会出现在与DOM加载完全相同的时间。但是你总是可以通过Spin.js
之类的东西使它看起来更友好