Javascript перед asp: щелчок по полю кнопки
-
03-07-2019 - |
Вопрос
У меня есть GridView
элемент управления в Asp.net приложении, которое имеет <asp:buttonField>
из type="image"
и CommandName="Delete"
.
Есть ли какой-либо способ выполнить фрагмент javascript до достижения OnRowDelete
событие?
Я хочу просто подтвердить перед удалением строки.
Спасибо!
Редактировать:Пожалуйста, обратите внимание, что <asp:ButtonField>
тег не имеет ан OnClientClick
атрибут.
Решение
Вместо этого я бы использовал TemplateField и заполнил ItemTemplate обычным asp:Button или asp: ImageButton, в зависимости от того, что необходимо.Затем вы можете выполнить ту же логику, которую собиралось выполнить событие RowCommand, когда оно перехватило команду Delete.
На любой из этих кнопок я бы затем использовал свойство OnClientClick для выполнения диалога подтверждения JavaScript перед этим.
<script type="text/javascript">
function confirmDelete()
{
return confirm("Are you sure you want to delete this?");
}
</script>
...
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton ID="DeleteButton" runat="server"
ImageUrl="..." AlternateText="Delete" ToolTip="Delete"
CommandName="Delete" CommandArgument='<%# Eval("ID") %>'
OnClientClick="return confirmDelete();" />
</ItemTemplate>
</asp:TemplateField>
Другие советы
Я обнаружил, что самый элегантный способ сделать это - использовать jQuery для передачи события onClick:
<script type="text/javascript">
$(".deleteLink").click(function() {
return confirm('Are you sure you wish to delete this record?');
});
</script>
...
<asp:ButtonField ButtonType="Link" Text="Delete"
CommandName="Delete" ItemStyle-CssClass="deleteLink" />
Обратите внимание, что я использую произвольный CSS-класс для идентификации кнопки ссылки.
В GridView
's RowCreated
обработчик событий, используйте FindControl
чтобы найти названную кнопку и добавить ее в коллекцию атрибутов:
btn.Attributes.Add("onclick", "return confirm('delete this record?');");
Ваш ASP.Net код будет выполнен только в том случае, если confirm() имеет значение true, т.е.все было в порядке.
Итак, у меня есть функция javascript:
function confirmDeleteContact() {
if (confirm("Are you sure you want to delete this contact?")) {
document.all.answer.value="yes";
} else {
document.all.answer.value="no";
}
}
и я подключаю его к элементу сетки следующим образом:
Sub dgbind(ByVal sender As Object, ByVal e As DataGridItemEventArgs) Handles dgcontacts.ItemDataBound
Select Case e.Item.ItemType
Case ListItemType.Item, ListItemType.AlternatingItem
CType(e.Item.Cells(9).Controls(0), System.Web.UI.WebControls.LinkButton).Attributes.Add("onclick", "javascript:confirmDeleteContact();")
End Select
End Sub
Это какой-то старый код, так что я вижу несколько вещей, которые я мог бы изменить, но мораль такова:Если все остальное не удается, добавьте javascript "onClick" во время привязки строки."document.all.answer.value" - это скрытое поле, которое содержит runat=server
чтобы я мог прочитать значение при обратной отправке.
лучше для вас добавить справочную систему.Windows.Формы, если вы используете buttonfield...Он всегда доступен во всех .net framework и поддерживает asp.net ..
это ваш выбор, если поле кнопок - ваш лучший выбор..образец:
using System.Windows.Forms;
protected void BorrowItem_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Delete")
{
if (System.Windows.Forms.MessageBox.Show("Do you want to delete", "Delete",MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification) != System.Windows.Forms.DialogResult.OK)
{
return;
}
}
//Continue execution...
}
//drimaster