2013-04-16 51 views
0

我已經使用ScottGu在線提供的NerdDinner教程創建了一個NerdDinner應用程序。我想將SignalR添加到我的應用程序中,以便每次創建新的晚餐時,主頁上顯示的晚餐的價值都應該更新。通過mvc4控制器將數據庫更改通知給signalr

我在我的HomeController

[HttpPost] 
    public ActionResult Create(Dinner dinner) 
    { 
     if (ModelState.IsValid) 
     { 
      nerdDinners.Dinners.Add(dinner); 

      nerdDinners.SaveChanges(); 
     } 
     return RedirectToAction("Index"); 
    } 

一個創建方法和我的HUB類是如下:

[HubName("DinnerHub")] 
public class NewDinnerHub : Hub 
{ 
    int dinnerCount = 0; 
    NerdDinners.Models.NerdDinners nerdDinners = new NerdDinners.Models.NerdDinners(); 

    public void SendDinnerNumber(int no_of_dinners) 
    { 
     var dinners = from d in nerdDinners.Dinners 
         select d; 
     dinnerCount = dinners.ToList().Count(); 
     no_of_dinners = dinnerCount; 
     IHubContext context = GlobalHost.ConnectionManager.GetHubContext<NewDinnerHub>(); 
     context.Clients.All.getDinnerNumber(this.Context.ConnectionId, no_of_dinners); 
    } 

} 

這裏是我的index.cshtml

@model IEnumerable<NerdDinners.Models.Dinner> 

<h2>Index</h2> 

<h1>Upcoming Dinners</h1> 
<ul> 
@foreach(var d in Model) { 
<li> 
    @Html.DisplayFor(modelItem => d.Title) 
    @Html.DisplayFor(modelItem => d.EventDate) 
</li> 
} 
</ul> 
<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 
<p> 
    @Html.Label("Number_of_Dinners","Number of Dinners : ") <label id="No_of_Dinners" /> 
</p> 
<table> 
    <tr> 
     <th> 
      Title 
     </th> 
     <th> 
      EventDate 
     </th> 
     <th> 
      Address 
     </th> 
     <th> 
      HostedBy 
     </th> 
     <th></th> 
    </tr> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.Title) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.EventDate) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Address) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.HostedBy) 
     </td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id=item.DinnerID }) | 
      @Html.ActionLink("Details", "Details", new { id=item.DinnerID }) | 
      @Html.ActionLink("Delete", "Delete", new { id=item.DinnerID }) 
     </td> 
     </tr> 
    } 

</table> 

和我在我的index.cshtml裏面的javascript也是低於

<script> 
    $(function() { 

     var hub = $.connection.DinnerHub; 
     $No_of_Dinners = $("#No_of_Dinners"); 

     hub.client.getDinnerNumber = function (connectionId, no_of_dinners) { 
      $No_of_Dinners.text = no_of_dinners; 
     }; 

     $.connection.hub.start().done(function() { 
      hub.server.sendDinnerNumber($No_of_Dinners); 
     }); 

    }); 
</script> 

<script src="../../Scripts/jquery-1.7.1.js"></script> 
<script src="../../Scripts/jquery-ui-1.8.20.js"></script> 
<script src="../../Scripts/jquery.signalR-1.0.1.js"></script> 
<script src="/signalr/hubs"></script> 

我不確定發生了什麼問題。每當添加新的晚餐時,我都需要在數據庫中更新我的'No_of_Dinners'標籤和晚餐數量。另外,我使用的是.Net MVC4,我不想將我的模式更改爲MVVM。我在網上看到的所有例子都是MVVM。

在此先感謝。

+0

你當前的代碼發生了什麼?它與你期望的有什麼不同? – Middas

+0

我期望它做的是,當有新的請求被創建時,標籤「No_of_Dinners」應該更新爲晚餐數量的計數。但目前它並沒有給我任何號碼。標籤是空白的。我認爲它忽略了集線器和我寫的JavaScript。 –

回答

1

我解決了這個問題。我沒有正常工作,因爲我的RegisterRoutes()上面沒有我的Route.MapHubs()方法。另外,我不得不從_Layout.cshtml中刪除bundles/jquery

相關問題