ASP.net javascript在asp上激活:ImageButton

时间:2012-08-13 13:28:08

标签: javascript jquery asp.net

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

 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>

3 个答案:

答案 0 :(得分:2)

OnClick中的

<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"

答案 1 :(得分:2)

对元素的onClick属性(特别是如果在页面上的数百个元素上)实际上是一种旧的做事方式。特别是如果你关心旧浏览器(和IE6-8),它们会为每个基本上都调用相同内容的元素创建“脚本”块(每个都单独),并且是相同类型的元素。这些在旧浏览器中极大地减慢了页面的速度,我强烈建议不要使用它们。

最好简单地在所有这些项目上创建一个整体的实时事件处理程序,如下所示:

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

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

答案 2 :(得分:1)

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