在每个页面上显示db查询结果的推荐方法是什么(徽章通知)

时间:2013-10-14 17:49:51

标签: asp.net-mvc asp.net-mvc-4 twitter-bootstrap

我想在我的asp.net MVC页面顶部的菜单旁边显示链接到我的用户的项目数量作为徽章。 (我正在使用bootstrap 3)

因为我不希望它是静态的,即它必须动态更新我把它放在我的布局页面中引用的部分视图页面_Menu.cshtml中,每次页面加载都会调用它...

<ul class="nav navbar-nav">
    <li>@*Html.ActionLink("Proposals", "Index", "MyController")*@
        @{
            var db = new MyDb();
            var count = db.Proposals.Count(p => p.UserName== User.Identity.Name );
            db.Dispose();
        }
        <a href="/MyController/Index">Home <span class="badge pull-right">@count</span></a>
    </li>
</ul>

所以它可以出现在每个页面上

我不认为这是非常好的方式,因为

1)关注点分离。我的cshtml

中直接有db逻辑

2)在每个页面上调用它并不是一个好主意,但我不确定仍然刷新它的最佳方法但不知何故缓存它

针对上述情况,asp.net MVC中菜单徽章通知的最佳做法是什么?

1 个答案:

答案 0 :(得分:2)

有很多方法可以让它发挥作用。在MVC中不推荐您的方式。

您可以使用ViewDataPartialViewjQuery

向您的控制器添加操作方法:

public ActionResult GetCount()
{
var db = new MyDb();
var count = db.Proposals.Count(p => p.UserName== User.Identity.Name );
db.Dispose();
return PartialView(count )
}

GetCount() PartialView:

<a href="/Buyer/Index">Home <span class="badge pull-right">@Model</span></a>

如果使用PartialView:

,则在_Menu.cshtm中
<ul class="nav navbar-nav">
    <li>@Html.ActionLink("Proposals", "Index", "MyController")
        @{Html.RenderAction("GetCount", "Home")}
    </li>
</ul>

使用_Menu.cshtm时的jQuery

<ul class="nav navbar-nav">
    <li>@Html.ActionLink("Proposals", "Index", "MyController")
     <div class="Count"></div>
        @{Html.RenderAction("GetCount", "Home")}
    </li>
</ul>

<script>
$(document).ready(function(){
$(".Count").load('@Url.Action("GetCount", "Home")')
});

</script>