0

ページの読み込み時にこのエラーが発生する理由を理解しようとしています:

 Compiler Error Message: BC30456: 'showNotifier' is not a member of 'ASP.pro_aspx'.

showNotifier は、jQuery を使用してブラウザー画面の上部からドロップダウンするエラー メッセージを表示する必要がある JavaScript 呼び出しです。マスターページにJavaScriptコードをロードしているので、どのページにもあることがわかります。

これが私のイメージボタンコードです:

 <asp:ImageButton ID="btnDelete" CommandName="Delete" CommandArgument='<%#Eval("id") %>' Text="Delete" runat="server" CssClass="delIcon" AlternateText="Delete" ToolTip="Delete" ImageUrl="~/del.png" />

どんな助けでも素晴らしいでしょう!

追加コード

Protected Sub grdView_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles grdView.RowCommand
    Dim cid As String = e.CommandArgument.ToString
    Dim command As String = e.CommandName.ToString

    If cid.Length <= 0 Then Exit Sub

    Select Case command
        Case "Delete"
            Delete(cid)
    End Select
End Sub

追加コード 2

Private Sub grdView_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grdView.RowDataBound
    If (e.Row.RowType = DataControlRowType.DataRow) Then
        Dim l As ImageButton = CType(e.Row.FindControl("btnDelete"), ImageButton)

        l.Attributes("OnClientClick") = "if(msgBoxShow('Are you sure you want to delete " & DataBinder.Eval(e.Row.DataItem, "Name") & "?','" & DataBinder.Eval(e.Row.DataItem, "Name") & "','')==false){return false;}"
    End If
End Sub

Javascript コードは次のとおりです。

<script type="text/javascript">
    function msgBoxShow(boxsaying, prodItemName, codeBehind) {
    apprise(boxsaying, {
        'verify': true,
        'textYes': 'Delete ' + prodItemName,
        'textNo': 'Cancel delete'
    },
                function (r) {
                    if (r) {
                        //alert('yes');
                        return true;
                    } else {
                        //alert('no');
                        return false;
                    }
                }
           );
}
</script>
4

3 に答える 3

2

OnClickin は、<asp:ImageButton>クリックしてページがサーバーにポストバックされたときに実行されるコード ビハインドの関数を識別するために使用されます (これは、通常の の場合と同じです<asp:Button>) 。

あなたが意味するのはOnClientClick、クライアントでjavascriptを実行するということです


OPからのコメントによる更新

ローカルの JavaScript 関数が false を返す場合にのみ返すには、次のようにします...

OnClientClick="if(myFn()==false){return false;}"

これが意味することは、関数が戻るfalseと、ボタンのクリックがキャンセルされ、フォームが投稿されないことを意味します (これにより、クライアント側の検証が実行されないことになります)。

関数が戻った場合、trueそれは続行され、サーバーへのポストバックを行います。

サーバーで正しい関数を呼び出すことに関しては、次のような画像ボタン専用の関数を作成します...

Protected Sub imgBtn_Click(ByVal sender As Object, ByVal e As EventArgs)
   ...
End Sub

次に、あなたがしたいOnClick="imgBtn_Click"

于 2012-08-13T13:34:52.147 に答える
2

要素への onClick 属性 (特にページ上の何百もの要素にある場合) は、実際には古い方法です。特に古いブラウザー (および IE6-8) を気にしている場合、これらは、基本的にすべて同じものを呼び出し、同じタイプの要素である要素ごとに「スクリプト」ブロック (それぞれ個別に) を作成します。これらは、古いブラウザーではページの速度を大幅に低下させるため、絶対に使用しないことを強くお勧めします。

次のように、これらすべての項目に対して全体的なライブ イベント ハンドラーを単純に作成する方がはるかに優れています。

$(document).on('click', '.delIcon', function () {
    showNotifier(3000,'#cf5050','Delete this?');
});

これにより、これらすべてのアイテムを待機する 1 つのイベントが作成されます (delIcon のクラスを使用)。あなたの問題も解決すると思います。ASP.NET は、showNotifier がバックエンド メソッドであると想定しています。

于 2012-08-13T13:34:57.720 に答える
1

では、ImageButtonクライアントOnClick側のスクリプトではなく、コード ビハインドでイベント ハンドラーを参照することを意図しています。OnClientClick代わりに使用する必要があります。

于 2012-08-13T13:34:27.797 に答える