Изтривам ред в моята уебрешетка и пренасочвам към моя GET индекс както обикновено след изтриване. Въпреки това, както се очакваше, изгледът ми показва стария изтрит ред, който все още е в мрежата. Знам, че това е проектирано и трябва да мога да настроя Modelstate да изчисти или да премахна елемента поотделно, за да постигна това:
ModelState.Remove("id");
Or
foreach (var key in ModelState.Keys.Where(m => m.StartsWith("id")).ToList())
ModelState.Remove(key);
Or
ModelState.Remove("Applicant.ApplicantId");
Или дори :
ModelState.Clear()
Никой обаче не работи за мен.
Ето моя метод за изтриване (опростен - цялата обработка на грешки и ненужният код са премахнати)
public ActionResult DeleteApplicant(int id)
{
var q =
(from a in context.Applicants
where a.ApplicantId == id
select a).Single<Applicant>();
q.ApplicantDocuments.ToList().ForEach(r => context.ApplicantDocuments.Remove(r));
context.Applicants.Remove(q);
context.SaveChanges();
foreach (var key in ModelState.Keys.Where(m => m.StartsWith("id")).ToList())
ModelState.Remove(key);
TempData["SuccessMessage"] = "Successfully deleted row.";
return RedirectToAction("Index");
}
И ето моето извикване на моя метод за изтриване от изгледа:
, grid.Column(format: (item) => @Html.ActionLink("Delete", "DeleteApplicant",
new { id = item.ApplicantId }, new { @class = "delete-link" }), style: "DeleteButton")
Разгледах различни публикации за stackoverflow и т.н., но изглежда никой не решава проблема ми: MVC 3 Изгледът не се опреснява след изпращане на модел
Опитах също да пренасоча към действието Index чрез jquery и да извикам действието на контролера за изтриване с ajaxOptions, но това също не проработи.
, grid.Column(format: (item) => @Ajax.ActionLink("Delete", "DeleteApplicant",
new { id = item.ApplicantId },
new AjaxOptions { HttpMethod = "GET" , OnSuccess= "reloadGrid" }))
И добавяне на малък скрипт за извикване на началния индекс:
function reloadGrid() {
var pathArray = window.location.pathname.split('/');
var segment_1 = pathArray[1];
var newURL = window.location.protocol + "//" + window.location.host + "/" + segment_1 + "/Home/Index";
$.ajax(
{
type: "GET",
url: newURL,
data: "{}",
cache: false,
dataType: "html",
success: function (data)
{ $().html(data); }
})
}
Явно правя нещо нередно. Има ли някакъв друг начин, по който мога да принудя опресняване на страницата по различен начин или може ли някой да забележи нещо очевидно нередно в текущия ми подход. Благодаря предварително.
Забележка: Имам маркирането на уеб мрежата в моя индексен изглед, а не в отделен частичен изглед, но не мисля, че това трябва да е причина за това?
Актуализация:
Ето метода GET, както е поискан: (за контекст, обектът филтри се използва, когато се щракне върху бутона за търсене и страницата се публикува обратно, без филтри, приложени при първоначалното зареждане на страницата)
public ActionResult Index(string page)
{
/////Peform paging initiation
int pageIndex = 0;
if (!string.IsNullOrEmpty(page))
{
pageIndex = int.Parse(page) - 1;
}
////initialize total record count and filter results object
int totalRecordCount = 0;
var filters = new ApplicantSearchFilter();
////Perform search with paging
var applicants = this.GetApplicantsPaging(filters ,pageIndex, out totalRecordCount);
////Return view type
var data = new ApplicantViewModel()
{
Filters =filters ,
TotalRecordCount = totalRecordCount,
ApplicantReportLists = applicants,
PageIndex = pageIndex,
};
////return Index view passing data result to build it
return this.View("Index", data);
}
}