У меня есть DIV (tenant-reference-photos
), который содержит частичный вид, отображающий фотографии. Рядом с каждой фотографией находится кнопка удаления. Когда он щелкнут, я хочу, чтобы фото было удалено из списка, и только DIV, который будет обновлен Ajax.MVC4 - освежающий частичный вид после удаления объекта с Ajax.ActionLink действует неожиданно
Я использую Ajax.ActionLink
для удаления действия:
<div>
@Ajax.ActionLink("Delete", "DeleteReference",
new { id = photo.ImageId },
new AjaxOptions { InsertionMode = InsertionMode.Replace, HttpMethod = "POST",
UpdateTargetId = "tenant-reference-photos" },
new { @class = "btn btn-primary" })
</div>
контроллер действия:
[HttpGet]
public ActionResult DeleteReference(int id)
{
return View(refPhotoRepository.Find(id));
}
[HttpPost, ActionName("DeleteReference")]
public ActionResult DeleteReferenceConfirmed(int id)
{
try
{
refPhotoRepository.Delete(id);
refPhotoRepository.Save();
return PartialView("_TenantReferencePhotosPartial");
}
catch (Exception e)
{
// handle exception
}
return View();
}
Когда я нажимаю удалить, пожары действий и запись удаляется из базы данных. Проблема заключается в return PartialView("_TenantReferencePhotosPartial");
. Когда действие пытается вернуть частичное, я получаю исключение NullReferenceException в @if (Model.ReferencePhotos.Count == 0)
.
_TenantReferencePhotosPartials.cshtml
<div>
@if (Model.ReferencePhotos.Count == 0)
{
<h3>You haven't uploaded any references!
@Ajax.ActionLink("Upload now?",
"TenantUploadReference",
new AjaxOptions
{
UpdateTargetId = "tenant-reference-photos",
InsertionMode = InsertionMode.Replace,
HttpMethod = "GET",
LoadingElementId = "ajax-loader"
})</h3>
}
else
{
foreach (var photo in Model.ReferencePhotos)
{
<ul class="thumbnails">
<li class="span8">
<a href="#" class="thumbnail">
<img src="@Url.Action("GetReference", "Tenants", new { id = photo.ImageId })" alt="@photo.Name") />
</a>
</li>
<li class="span4 btn-group btn-group-vertical">
<a href="#" class="btn btn-primary" id="showEditPhotoModal" role="button" data-toggle="modal">Edit</a>
@Ajax.ActionLink("Delete", "DeleteReference",
new { id = photo.ImageId },
new AjaxOptions { InsertionMode = InsertionMode.Replace, HttpMethod = "POST", UpdateTargetId = "tenant-reference-photos" },
new { @class = "btn btn-primary" })
</li>
</ul>
}
}
</div>
Даже если есть несколько фотографий в коллекции и один удаляется, исключение еще выброшены на линии, упомянутой выше. Некоторая помощь будет оценена по достоинству.
где вы определили эту функцию? на той же странице .cshtml или на странице _layout.cshtml. Похоже, он не смог разрешить на странице, на которой вы ссылаетесь. – Typist
Я определил его в файле с именем site.js, когда я смотрю его источник. У меня были некоторые проблемы с jQuery $, которые не определены в частичных, даже если они есть в источнике.Если я разрешу не определенную ошибку, моя функция js на правильном пути обновит DIV? – MattSull
Вы видите исходный код сайта и javascript-файлы jQuery или только ссылки на них в разделе главы или внизу. Как только вы увидите источник этих файлов, вы обнаружите, что обе эти ошибки решены. Сейчас вы обновляете всю страницу с помощью - window.location.reload (true); Чтобы обновить div без обновления страницы, вам просто нужно назначить входящий html div как - («#div_id»). Html (incoming_html); – Typist