Asp.netアプリケーションにGridView
コントロールがあり、<asp:buttonField>
of type="image"
およびCommandName="Delete"
。
OnRowDelete
イベントに到達する前にJavaScriptを実行する方法はありますか?
行を削除する前に、簡単な確認が必要です。
ありがとう!
[〜#〜] edit [〜#〜]:<asp:ButtonField>
tag ありませんOnClientClick
属性。
代わりに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>
これを行う最も洗練された方法は、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
のRowCreated
イベントハンドラーで、FindControl
を使用して名前付きボタンを見つけ、Attributesコレクションに追加します。
btn.Attributes.Add("onclick", "return confirm('delete this record?');");
ASP.Netコードは、confirm()がtrueの場合、つまりOKの場合にのみ実行されます。
だから私は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
を持つ非表示フィールドです。