Как мне обновить список после удаления строки с помощью jquery ajax в asp.net mvc?
Моя проблема заключается в том, что когда я удалил строку, а после удаления строки она будет скрыта в моем списке, и когда я использую IE и F5 для обновления страницы, но эта строка по-прежнему отображается. chorme и firefox работают нормально.
Посмотреть список:
@model IEnumerable<PG.Admin.Models.TimeSheetHeaders.TimeSheetHeaderViewModel>
@{
ViewBag.Title = "";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@Scripts.Render("~/Scripts/jquery.unobtrusive-ajax.js")
<div id="unobtrusive">
@Html.Partial("_TimeSheetList", Model)
</div>
_ListTimeSheet (частичное представление)
@model PagedList.IPagedList<PG.Admin.Models.TimeSheetHeaders.TimeSheetHeaderViewModel>
@using PagedList.Mvc;
<table class="table table-striped">
<tbody>
<tr>
<th>
@Html.DisplayNameFor(model => model.First().Date)
</th>
<th>
@Html.DisplayNameFor(model => model.First().PGId)
</th>
<th>
@Html.DisplayNameFor(model => model.First().OutletID)
</th>
<th></th>
</tr>
@foreach (var group in Model)
{
<tr>
<td>@Html.DisplayFor(model => group.Date)</td>
<td>@Html.DisplayFor(model => group.PGId)</td>
<td>@Html.DisplayFor(model => group.OutletID)</td>
<td>
@Html.ActionLink("Delete", "DeleteTimeSheetConfirmed", new { id = group.Id }, new { @id = group.Id, @class = "delete-timesheet" })
</td>
</tr>
}
</tbody>
</table>
<div class="dataTable-paging">
<div class="row">
<div class="col-xs-6">
<div class="paging-info">
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
</div>
</div>
<div class="col-xs-6">
<div class="paging-content">
@Html.PagedListPager(Model, page => Url.Action("GroupListTimeSheet",
new { page, key = ViewBag.CurrentFilterKey, currentFilter = ViewBag.CurrentFilter }),
PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing(new AjaxOptions() { HttpMethod = "GET", UpdateTargetId = "unobtrusive" }))
</div>
</div>
</div>
</div>
<script type="text/javascript">
$('.delete-timesheet').on("click", function (e) {
var flag = confirm('delete ?');
if (flag) {
e.preventDefault();
var id = e.target.id;
$.ajax({
url: '@Url.Action("DeleteTimeSheetConfirmed", "TimeSheet")',
type: 'POST',
data: { id: id },
dataType: "json",
cache: false,
success: function () {
$("#" + id).closest('tr').remove();
},
error: function () {
alert('Error!');
}
});
}
return false;
});
</script>
контроллер:
public ActionResult GroupListTimeSheet(string key, string searchName, string currentFilter, int? page)
{
var groupTimeSheet = _timeSheetService.GroupTimeSheetByTimeSheetHeader().ToListViewModel();
if (searchName != null)
{
page = 1;
}
else
{
searchName = currentFilter;
}
ViewBag.CurrentFilter = searchName;
ViewBag.CurrentFilterKey = key;
if (!String.IsNullOrEmpty(searchName) && key == "pgcode")
{
groupTimeSheet = groupTimeSheet.Where(m => m.PGId.Contains(searchName)).ToList();
}
if (!String.IsNullOrEmpty(searchName) && key == "quancode")
{
groupTimeSheet = groupTimeSheet.Where(m => m.OutletID.Contains(searchName)).ToList();
}
if (!String.IsNullOrEmpty(searchName) && key == "date")
{
groupTimeSheet = groupTimeSheet.Where(m => Convert.ToString(m.Date).Contains(searchName)).ToList();
}
int pageSize = 15;
int pageNumber = (page ?? 1);
if (Request.IsAjaxRequest())
{
return (ActionResult)PartialView("_TimeSheetList", groupTimeSheet.ToPagedList(pageNumber, pageSize));
}
else
{
return View(groupTimeSheet.ToPagedList(pageNumber, pageSize));
}
}
[HttpPost]
public ActionResult DeleteTimeSheetConfirmed(Int64 id)
{
var timeSheetHeader = _timeSheetService.GetTimeSheetHeaderById(id);
if (timeSheetHeader == null)
return RedirectToAction("Index");
_timeSheetService.DeleteTimeSheet(timeSheetHeader);
return Json(true, JsonRequestBehavior.AllowGet);
}
TimeSheetService:
public IQueryable<TimeSheetHeader> GroupTimeSheetByTimeSheetHeader()
{
var groupTimeSheet = from tsh in _timeSheetHeaderRepository
.IncludeTable(
m => m.TimeSheetDetails,
m => m.PGProfile,
m => m.Quan,
m => m.WorkType).OrderByDescending(m => m.Date)
select tsh;
return groupTimeSheet.AsQueryable();
}
1 ответ
Решение
Похоже, ваше частичное представление кешируется.
Для частичного просмотра добавить [OutputCache(Duration=1)]
к действию (по какой-то причине 0 не допускается при частичном просмотре).
Для полного просмотра есть несколько вариантов
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "None")]
или просто
[OutputCache(Duration=0)]