Javascript перед asp: кнопка ButtonField - PullRequest
25 голосов
/ 20 октября 2008

У меня есть элемент управления GridView в приложении Asp.net, который имеет <asp:buttonField> из type="image" и CommandName="Delete".

Есть ли способ выполнить фрагмент javascript до достижения события OnRowDelete?

Я хочу просто подтвердить перед удалением строки.

Спасибо!

РЕДАКТИРОВАТЬ : Обратите внимание, что тег <asp:ButtonField> не имеет OnClientClick атрибута.

Ответы [ 5 ]

23 голосов
/ 20 октября 2008

Я бы вместо этого использовал 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>
15 голосов
/ 01 марта 2010

Я обнаружил, что самый элегантный способ сделать это - использовать 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 для идентификации кнопки ссылки.

2 голосов
/ 20 октября 2008

В обработчике событий GridView RowCreated используйте FindControl, чтобы найти названную кнопку и добавьте в коллекцию атрибутов:

btn.Attributes.Add("onclick", "return confirm('delete this record?');");

Ваш код ASP.Net будет выполняться только в том случае, если для true () установлено значение true, т. Е. Все в порядке.

0 голосов
/ 10 февраля 2013

лучше для вас добавить ссылку 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
0 голосов
/ 20 октября 2008

Итак, у меня есть функция 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, так что я могу прочитать значение при обратной передаче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...