У меня есть элемент управления 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>
Так получилось, что у меня есть образец из проекта, который я открываю прямо сейчас.
Извините, я должен был предоставить образец кода. Спасибо tvanfosson за его предоставление / отредактируйте мой ответ.
Итак, у меня есть функция 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, чтобы я мог прочитать значение при обратной передаче.
В обработчике событий GridViewRowCreated используйте FindControl, чтобы найти названную кнопку и добавить в коллекцию атрибутов:
btn.Attributes.Add("onclick", "return confirm('delete this record?');");
Ваш код ASP.Net будет выполнен только в том случае, если confirm () истинно, то есть все в порядке.
Я обнаружил, что самый элегантный способ сделать это - использовать 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 для идентификации кнопки ссылки.
лучше для вас добавить ссылку System.Windows.Forms, если вы используете 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
Мне удалось унаследовать от ButtonField и добавить к нему атрибут OnClientClick. но по какой-то причине он не выполняет фактическое удаление.