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。
在此先感謝。
你當前的代碼發生了什麼?它與你期望的有什麼不同? – Middas
我期望它做的是,當有新的請求被創建時,標籤「No_of_Dinners」應該更新爲晚餐數量的計數。但目前它並沒有給我任何號碼。標籤是空白的。我認爲它忽略了集線器和我寫的JavaScript。 –