我想在我的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中菜单徽章通知的最佳做法是什么?
答案 0 :(得分:2)
有很多方法可以让它发挥作用。在MVC中不推荐您的方式。
您可以使用ViewData
,PartialView
或jQuery
。
向您的控制器添加操作方法:
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>