我正在尝试刷新MVC 5中的局部视图div,以便表格显示新的SQL数据。但是,我遇到了问题。现在的方式是,当我在页面加载后向SQL表中添加任何新数据时,div不会刷新包含新数据...只是页面加载时表中的数据。
这是我的控制器:
Select YourDate
From YourTable
Where YourConditions
order by to_char(YourDate,'MMDD')
这是我的部分视图:
public ActionResult Index()
{
List<List<object>> result = DataAccess.DataAccess.Read(Build.StringArray("Notifications"));
Notifications Notify = new Notifications();
Notify.Update = new List<Notification>();
foreach (List<object> row in result)
{
Notification x = new Notification();
x.notificationMessage = (string)row[1];
x.ID = (int)row[0];
x.TimeStamp = (DateTime)row[2];
Notify.Update.Insert(0,x);
}
return View("Index",Notify);
}
索引视图:
@model inConcert.Models.Notifications
<table class="table">
<tr>
<th>
<h3>Update</h3>
</th>
<th>
<h3>TimeStamp</h3>
</th>
</tr>
@foreach (var item in Model.Update)
{
<tr>
<td>
@item.notificationMessage
</td>
<td>
@item.TimeStamp
</td>
</tr>
}
</table>
我的模特:
@model inConcert.Models.Notifications
<head>
<title></title>
<link href="@Url.Content("~/Content/Notifications.css")" rel="stylesheet" type="text/css" />
</head>
<div id="notificationsTable">
@Html.Partial("~/Views/Shared/NotificationPartial.cshtml")
</div>
<script type="text/javascript" src="~/Scripts/jquery-2.1.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
setInterval(function () {
$("#notificationsTable").load("~/Views/Shared/NotificationPartial.cshtml");
}, 2000);
});
答案 0 :(得分:11)
您的.load()
函数正在尝试调用一个静态文件,该文件默认会抛出403(Forbidden)错误且没有数据更新(我强烈建议您学习使用浏览器工具 - 这应该是显而易见的)
您需要创建一个生成模型的控制器方法,并返回数据的部分视图。例如
public ActionResult Fetch()
{
Notifications model = new Notifications();
.... // populate your model from the repository
return PartialView("_Notifications", model);
}
_Notifications.cshtml
@model inConcert.Models.Notification
@foreach (var item in Model.Update)
{
<tr>
<td>@item.notificationMessage</td>
<td>@item.TimeStamp</td>
</tr>
}
在主视图中,要初始加载它,您可以使用
@{Html.RenderAction("Fetch");}
这意味着您不必在Index()
方法
然后在剧本中
var url = '@Url.Action("Fetch")';
var notifications = $("#notificationsTable"); // cache it to avoid repeatedly searching the DOM
setInterval(function () {
notifications.load(url);
}, 2000);
旁注:除非您期望数据每2秒不断变化,否则这种方法效率可能会非常低。作为一种改变,您应该考虑使用SignalR,以便您的服务器端代码实时地将内容推送到连接的客户端。另请参阅this tutorial。