1

我想在我的 asp.net MVC 页面顶部的菜单旁边显示链接到我的用户的项目数作为徽章。(我正在使用引导程序 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中直接有数据库逻辑

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

对于上述场景,asp.net MVC 中菜单标记通知的最佳实践是什么?

4

1 回答 1

3

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

您可以使用ViewData或。PartialViewjQuery

将操作方法​​添加到您的控制器:

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

在您的GetCount()部分视图中:

<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.cshtmif 使用中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>
于 2013-10-14T18:30:10.517 回答