在_Layout中使用实体框架的最佳和正确方法

时间:2015-07-07 14:08:20

标签: asp.net asp.net-mvc

我有一个标准的ASP.Net模板,它有一个生成菜单的_Layout。我有多个数据上下文代表我的应用程序中的不同数据库,一切正常。

我想在_Layout中的一个项目旁边添加一个计数作为引导徽章。为此,我需要传入db.TicketDal.Count()。直接在布局中执行此操作的最佳方法是什么。我确实尝试从家庭控制器传递ViewBag条目中的数据,但是当我转到不显示的不同控制器时。我可以修改每个控制器,但这似乎是错误的方法。我怀疑我是在推翻这个,但任何建议都会受到赞赏。

2 个答案:

答案 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

之类的东西使它看起来更友好