0

私は ASP.NET MVC 3 でまったく新しいので、既に作成されているメニューがあるアプリケーションを作成する必要があり、Inbox(No. of Unread msg) という名前の別のメニュー項目を追加する必要があります。

テストの目的で、タイマーを使用する必要があり、ある間隔でカウンター変数を増やし、そのテキストを受信トレイにバインドします。つまり、5 秒後にカウンター変数の値が 1 の場合、メニューは Inbox(1) を表示する必要があり、10 秒後にカウンター変数の値が 2 の場合、メニューは Inbox(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 に答える