0

我在 ASP.NET MVC 3 中是全新的,我需要创建一个应用程序,其中已经创建了一个菜单,我需要添加另一个名为 Inbox(未读消息的编号)的菜单项。

出于测试目的,我需要使用计时器并每隔一段时间增加计数器变量并将该文本绑定到收件箱中。也就是说,5 秒后我的计数器变量值为 1,然后菜单应显示收件箱(1),10 秒后我的计数器变量值为 2,然后菜单应显示收件箱(2)。

我对所有视图都有相同的控制器,我还需要实现计时器。那么,有什么想法可以在不影响其控制器的情况下实现计时器并更改菜单名称。

目前我的菜单容器看起来像这样。

<div id="menucontainer">
    <ul id="menu">
        <li>@Html.ActionLink("Home", "Index", "Home")</li>
         <li>@Html.ActionLink("About", "About", "Home")</li>
         <li>@Html.ActionLink("Video", "Video", "Home")</li>
         <li>@Html.ActionLink("Social", "Social", "Home")</li>
         <li>@Html.ActionLink("Photos", "Photos", "Home")</li>
         <li>@Html.ActionLink("Blog", "Blog", "Home")</li>
         <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
         <li>@Html.ActionLink("Inbox","Inbox","Home")</li>
     </ul>
 </div>
4

1 回答 1

1

我会做这样的事情:

<div id="menucontainer">
    <ul id="menu">
        <li>@Html.ActionLink("Home", "Index", "Home")</li>
         <li>@Html.ActionLink("About", "About", "Home")</li>
         <li>@Html.ActionLink("Video", "Video", "Home")</li>
         <li>@Html.ActionLink("Social", "Social", "Home")</li>
         <li>@Html.ActionLink("Photos", "Photos", "Home")</li>
         <li>@Html.ActionLink("Blog", "Blog", "Home")</li>
         <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
         <li><a href="@Url.Action("Inbox","Home")">Inbox <span class="message-count"></span></a></li>
     </ul>
 </div>

在 Javascript 中(使用 jQuery 让事情变得更简单)

function checkInbox() {
    var url = '@Url.Action("GetInboxCount","Services")';
    $.get(url, { userId : @UserId }, function(data) {
        if(data != null) $(".message-count").text(data); // update count
    });
}

并且在 DOM 就绪区域中,只需设置间隔

(function() {
    checkInbox(); // check for the first time
    setInterval(checkInbox(), 30 * 1000); // and every 30 seconds
});

创建一个名为的控制器Services并添加一个输出 JSON 的方法,例如:

public class ServicesController : Controller
{
    var db = yourDatabaseContext;

    public JsonResult GetInboxCount(int userId)
    {
        inboxCount = db.GetInboxCountByUserId(userId);
        return Json(inboxCount, JsonRequestBehavior.AllowGet);
    }
}
于 2012-04-26T06:14:37.250 回答