我正在做一個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;組; } }' –