Ваш вопрос немного странный, поскольку вы говорите об удалении строки и демонстрируете нам код добавления классов. Тогда вы говорите о removerow
обратном вызове. Вещи на самом деле не связаны в вашем вопросе. Но в любом случае на ум приходят 2 варианта:
- Пусть действие контроллера, которое вы вызываете с помощью AJAX для удаления ответа, вернет частичное представление, содержащее таблицу, а затем заменит таблицу в обратном вызове успеха этим частичным.
- Удалить соответствующую строку на клиенте в обратном вызове успеха
Недостаток первого подхода заключается в том, что вам необходимо выполнить дополнительный SQL-запрос для повторного получения набора данных, который позволил вам изначально сгенерировать таблицу, но гарантирует, что вы получите правильные данные. При втором подходе, если вы удаляете только соответствующую строку, используя javascript, могут быть другие пользователи, которые удалили другие строки одновременно, и вы не получите правильное представление данных.
Итак, при первом подходе вы выводите таблицу в парциальное состояние:
<div id="incrementadd">
@Html.Partial("_Table", Model.Answers)
</div>
и затем в вашем действии Удалить:
[HttpPost]
public ActionResult Delete(int id)
{
1. Delete the record with the given id in your database
2. Refetch all the answers and pass them to the partial
return PartialView("_Table", answers);
}
При втором подходе к успешному обратному вызову необходимо передать текущую строку таблицы, которую нужно удалить. Для этого вы можете назначить ему уникальный идентификатор для элемента <tr>
:
@foreach (var item in Model)
{
<tr id="row@item.ID">
<td>
@Html.DisplayFor(modelItem => item.UserID)
</td>
<td id ="userclass">
@Ajax.ActionLink(
"Delete answer",
"Delete",
"Answers",
new {
id = item.ID,
},
new AjaxOptions {
HttpMethod = "POST",
OnSuccess = string.Format(
"deleteSuccess({0})",
Json.Encode(item.ID)
),
LoadingElementId = "progressToadd"
}
)
</td>
</tr>
}
и deleteSuccess
:
var deleteSuccess = function(rowid) {
$('#row' + rowid).remove();
};