0

嘿,我想弄清楚为什么我的页面加载时会出现此错误:

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

showNotifier 是一个 javascript 调用,我必须使用 jQuery 显示从浏览器屏幕顶部下拉的错误消息。我在我的母版页中加载了 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 an<asp:ImageButton>用于识别代码隐藏中的函数,当您单击并将页面回发到服务器时将运行该函数(这与 normal 相同<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?');
});

这将创建一个等待所有这些项目的事件(使用 delIcon 类)。我假设它也会解决你的问题。ASP.NET 假设 showNotifier 是一个后端方法。

于 2012-08-13T13:34:57.720 回答
1

在您的ImageButton,OnClick中是指在您的代码隐藏中引用事件处理程序,而不是客户端脚本。你应该OnClientClick改用。

于 2012-08-13T13:34:27.797 回答