MVC/Razorアプリケーションでメンテナンスを行っていて、コードの仕組みを理解しようとしています。 Webページには更新ボタンがあり、ユーザーがクリックすると、タスクのリストが更新されるはずです。それは壊れているようですが、どのように動作するかを調べる際に、Ajaxのやり方とMVCの部分的な見方との間に矛盾があるように見えます。私はコードがもともとAjax呼び出しのために書かれた疑いがありますが、後にMVCに行くことに決めたときに、部分ビューのアプローチでそれをオーバーライドしました。しかし、私はこれがどのように機能するかについて十分に知識がありません。ここで
@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です - ここ
は部分図「更新」ボタンが含まれています(名前の「_TasksAndAlerts.cshtml」)であります
about $ .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"からの何らかの応答を期待していることを知っていますが、そのメソッドが返すものは部分的なビューです( "HomePage/_TasksAndAlerts"、limduDataHelper.GetTasksAndAlertsModel "を返す)。リストはGetTasksAndAlertsModelへの呼び出しで構築されています。私は成功かどうかを理解しようとしています:関数は実際に何かをしていて、それがあれば、それは何を使っていますか?成功:関数は私には意味をなさない、 –
私はmissspoke - いくつかのリストを含むこのクラスが返されます。 'public class TasksAndAlertsModel { public ArrayList alerts {get; set;} publicリスト unassignedAlerts {get; set;} 公開リスト lockedByAnotherUserAlerts {get;セット; } 公開リスト lockedByCurrentUserAlerts {get;セット; } パブリックbool isOnDuty {get;セット; } パブリックbool isNotAPatient {get;セット; } } ' –