Во-первых, я вижу некоторую разметку для UpdatePanel
, которую я не считаю необходимой.Вообще говоря, когда дело доходит до UpdatePanels
, лучше сначала заставить вещи работать, а затем реализовывать их позже, если это действительно необходимо.
Итак, при рассмотрении этого вопроса я хочу убедиться, что вы понимаете разницу междусинхронный вызов по сравнению с асинхронным вызовом.
Если бы вы воспользовались встроенными моделями js confirm()
, все работало бы так, как ожидалось:
OnClientClick="return window.confirm('Are you sure you want to delete this image')"
Это работает, потому что встроенный confirm()
функция является синхронной, что означает, что она ожидает ответа пользователя перед возвратом.
Однако, модалы Bootstrap являются асинхронными, что означает следующее:
OnClientClick="return ConfirmDelete()"
вызывает это:
function ConfirmDelete()
{
$('#DeleteModal').modal(); // initialized with defaults
return false;
}
, который, потому что вызов .modal()
является асинхронным, заставляет его немедленно вернуться, и поэтому ConfirmDelete()
выходит и возвращает false, что хорошо, потому что это предотвращает обратную передачу и позволяет отображать модальный режим.В противном случае страница будет отправлена назад, и вы никогда не увидите модальный.
Теперь, в этот момент, поскольку ConfirmDelete()
уже вернулся, вы находитесь за пределами мира повторителя.Таким образом, единственное, что вам нужно сделать, это передать модалу уникальные данные ключа, связанные со строкой ретранслятора, которая активировала модал, так что при подтверждении вы удаляете соответствующую запись.
После нажатия btnDeleteImage
происходитвызвать обратную передачу на btnDeleteImage_Click
в вашем коде позади.Здесь вы добавляете код для удаления соответствующей записи.
Как вы передаете эти ключевые данные?Одна возможность - заполнить один или несколько HiddenField
, на которые есть ссылки при обратной передаче.Скрытые поля являются хорошим способом передачи данных между клиентской и серверной кодами.
, поэтому предположим, что вы добавили это на свою страницу .aspx:
<asp:HiddenField ID="hfDeleteParameter1" runat="server" ClientIDMode="Static" />
Примечание: ClientIDMode="Static"
предотвращает искажение идентификатора, поэтому на него можно ссылаться, как и ожидалось, в js-коде на стороне клиента.
Итак, в событии ItemDataBound вы можете программно создать вызов функции OnClientClick
, где вы передаетеключевые данные в качестве параметра:
Это VB, если вы используете C #, он должен быть похожим.
Private Sub rptImages_ItemDataBound(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptImages.ItemDataBound
If e.Item.ItemType = ListItemType.Item Or
e.Item.ItemType = ListItemType.AlternatingItem Then
Dim lb As LinkButton = e.Item.FindControl("lbDelete")
lb.OnClientClick = String.Format("return ConfirmDelete('{0}');",
row_specific_key_data)
End If
End Sub
и в js:
function ConfirmDelete(rowData) {
$('#hfDeleteParameter1').val( rowData );
$('#DeleteModal').modal(); // initialized with defaults
return false;
}
Затем, когда пользователь подтвердит удаление, нажав btnDeleteImage
, это вызовет обратную передачу и вызовет кнопки Нажмите событие btnDeleteImage_Click
, где вы можете получить доступ к скрытому полю:
Private Sub btnDeleteImage_Click(sender As Object, e As EventArgs) Handles btnCustomLookback.Click
dim keydata as string = hfDeleteParameter1.value
// do delete
End Sub
Это один вариантиз многих.
Для записи вы могли бы сделать вызов операции удаления источника данных ретранслятора, но вам нужно будет заполнить параметры и затем вызвать DataSource.delete()
, но это не совсем так, как это предполагаетсяРабота.
Операции удаления / обновления / вставки, определенные в источнике данных серверного элемента управления, предназначены для использования этим элементом управления, он автоматически управляет параметрами.Вызывать операции delete (), например, когда вам приходится переопределять эти управляемые параметры, - плохая привычка.
Поэтому вам нужно написать пользовательскую функцию удаления, которая действует направильная ключевая информация.