我正在做一个MVC/Razor应用程序的维护,并且试图了解一些代码是如何工作的。网页上有一个刷新按钮,当用户点击它时,它应该刷新任务列表。它似乎被破坏了,但在试图追踪它的工作方式时,我遇到了Ajax做事情和MVC做部分视图的方式之间的冲突。我有点怀疑代码最初是为Ajax调用编写的,但是当他们后来决定去使用MVC时,他们只是用部分视图方法取代了它;但我对这个工作如何确定还不够了解。
下面是部分认为含有“刷新”按钮(名为“_TasksAndAlerts.cshtml”) -
@model TasksAndAlertsModel
<section class="block-1-2 pull-right" id="TasksAndAlertsSection">
<div class="inline">
<h3>tasks/alerts<span>@Model.alerts.Count</span></h3>
</div>
<div class="inline" style="margin: 19px 0px 0px 0px;">
<!-- this is the "refresh" button, visually it's an icon -->
<button style="width: 20px; height: 20px;" id="refreshTasksAndAlerts" class="k-button"
onclick="RefreshTasksAndAlertsAjaxCall(0);return false;">
<span style="position: relative; left: -6px; top: -6px;" class="k-icon k-si-refresh"></span>
</button>
</div>
<ul class="tasks" style="overflow: auto; height: 404px">
@for (int a = 0; a < Model.lockedByCurrentUserAlerts.Count; a++)
{
@Html.Raw(HttpUtility.HtmlDecode(Model.alerts[Model.lockedByCurrentUserAlerts.ElementAt(a)].ToString()));
}
@for (int b = 0; b < Model.unassignedAlerts.Count; b++)
{
@Html.Raw(HttpUtility.HtmlDecode(Model.alerts[Model.unassignedAlerts.ElementAt(b)].ToString()));
}
@for (int c = 0; c < Model.lockedByAnotherUserAlerts.Count; c++)
{
@Html.Raw(HttpUtility.HtmlDecode(Model.alerts[Model.lockedByAnotherUserAlerts.ElementAt(c)].ToString()));
}
</ul>
</section>
这里是通过点击“刷新”
function RefreshTasksAndAlertsAjaxCall(alertID) {
$.ajax({
type: "GET",
url: siteRoot + "Home/RefreshTasksAndAlerts/?t=" + Math.random(),
success: function (response) {
$(document.getElementById("TasksAndAlertsSection")).html(response);
},
error: function (response) {
//alert(response.responseText);
}
});
}
触发JavaScript的
从阅读大约$ .ajax,我得到的印象是,成功值的内容将取代“getElementById(”TasksAndAlertsSection“)”部分中的所有内容。但是从“RefreshTasksAndAlerts”返回的是一个列表,而不是HTML。虽然可以使用某种类型的javaScript处理列表,但我没有看到任何可以实现的情况。
这里是JavaScript的
public PartialViewResult RefreshTasksAndAlerts(int? id)
{
LIMDUEntities db = closedKeyEntity;
return PartialView("HomePage/_TasksAndAlerts", limduDataHelper.GetTasksAndAlertsModel(HOURS_UNTIL_TASKS_SHOULD_BE_REASSIGNED, db));
}
的代码在“回归”简称叫控制器代码是一个漫长的一段代码,最终返回一个列表(我只是出一块吧,因为它建立是不是我的问题):
public TasksAndAlertsModel GetTasksAndAlertsModel(int HOURS_UNTIL_TASKS_SHOULD_BE_REASSIGNED, LIMDUEntities db)
{
ArrayList alerts = new ArrayList();
TasksAndAlertsModel TAAM = new TasksAndAlertsModel();
TAAM.alerts = alerts;
TAAM.unassignedAlerts = UnassignedIndexes;
TAAM.lockedByAnotherUserAlerts = lockedByAnotherUserIndexes;
TAAM.lockedByCurrentUserAlerts = lockedByCurrentUserIndexes;
return TAAM;
}
我对实际发生的事情感到困惑 - 它看起来对我来说,互相两种方法的冲突。由于返回到$ .Ajax的数据不是HTML,我猜测它会丢失,并且从控制器返回的局部视图就是显示的内容。如果是这样的话,甚至需要“成功”的部分吗?会有更清晰的方式来表达这一点吗?
你怎么知道'RefreshTasksAndAlerts'返回一个列表?什么样的名单返回? – Floremin
我现在不确定,这是一个假设。我发现$ .Ajax希望得到某种来自“Home/RefreshTasksAndAlerts”的响应,但该方法返回的是部分视图(“返回PartialView(”HomePage/_TasksAndAlerts“,limduDataHelper.GetTasksAndAlertsModel”)返回的部分是列表中建立的调用GetTasksAndAlertsModel。我试图了解,如果成功:函数实际上是做任何事情,如果是,那么它是与什么工作?成功:函数对我来说没有意义,我不' –
我missspoke - 返回的是这个类,其中包括几个列表public class TasksAndAlertsModel { public ArrayList alerts {get; set;} public List unassignedAlerts {get; set;} public List lockedByAnotherUserAlerts {get;组; } public List lockedByCurrentUserAlerts {get;组; } public bool isOnDuty {get;组; } public bool isNotAPatient {get;组; } }' –