25

GridViewAsp.net アプリケーションにコントロールがあり、<asp:buttonField>oftype="image"CommandName="Delete".

OnRowDeleteイベントに到達する前にJavaScriptを実行する方法はありますか?

行を削除する前に簡単な確認が必要です。

ありがとう!

編集<asp:ButtonField>:タグには属性がないことに注意してください。OnClientClick

4

5 に答える 5

23

代わりに TemplateField を使用し、必要に応じて通常の asp:Button または asp:ImageButton を ItemTemplate に設定します。その後、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>
于 2008-10-20T15:16:37.100 に答える
15

これを行う最も洗練された方法は、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クラスを使用していることに注意してください。

于 2010-03-01T20:18:13.203 に答える
3

のイベント ハンドラーで、 を使用GridViewして名前付きボタンを検索し、Attributes コレクションに追加します。RowCreatedFindControl

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

ASP.Net コードは、confirm() が true の場合、つまり OK されている場合にのみ実行されます。

于 2008-10-20T16:42:42.387 に答える
0

だから私は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ポストバック時に値を読み取ることができるようにする隠しフィールドです。

于 2008-10-20T16:27:37.127 に答える
-2

ボタンフィールドを使用する場合は、参照 System.Windows.Forms を追加することをお勧めします...すべての .net フレームワークで常に利用可能で、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
于 2013-02-10T13:56:45.940 に答える