ASP.NET GridView ItemTemplate LinkButton在JavaScript确认后对RowCommand的支持

ASP.NET GridView ItemTemplate LinkButton在JavaScript确认后对RowCommand的支持,javascript,asp.net,Javascript,Asp.net,给定以下GridView代码: <asp:GridView ID="gvReq" runat="server" DataSourceID="objdsReq" > <Columns> <asp:TemplateField HeaderText="Control"> <ItemTemplate> <asp:LinkButton ID="lbdelete" runat="server" CommandArg

给定以下GridView代码:

<asp:GridView ID="gvReq" runat="server" DataSourceID="objdsReq" >
  <Columns>
    <asp:TemplateField HeaderText="Control">
      <ItemTemplate>
        <asp:LinkButton ID="lbdelete" runat="server" CommandArgument='<%# Container.DataItemIndex %>' ForeColor="Red" CommandName="DeleteReq">Delete</asp:LinkButton>
      </ItemTemplate>
    </asp:TemplateField>  
  </Columns>
</asp:GridView>
<asp:ObjectDataSource ID="objdsReq" runat="server" SelectMethod="GetDataTable" >
  <%-- parameter list --%>
</asp:ObjectDataSource>
JavaScript启动,但RowCommand事件永远不会启动-我猜是因为它只由JavaScript处理:

Protected Sub gvReq_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) Handles gvReq.RowCommand
  Dim dataItemIndex As Integer = Convert.ToInt32(e.CommandArgument)
  Dim reqID As Integer = Convert.ToInt32(gvReq.DataKeys(dataItemIndex).Values(0))
  If e.CommandName = "DeleteReq" Then
JavaScript确认对话框是根据管理层的要求放在那里的


现在,如果有人单击JavaScript确认框中的
OK
,如何让RowCommand事件处理程序启动

尝试将按钮的命令名更改为“删除”

更新:

而不是

lbdelete.Attributes.Add("onclick", "javascript:if(confirm('Are you sure you want to delete?')){return true}else{return false}")
试一试


尝试将按钮的命令名更改为“删除”

更新:

而不是

lbdelete.Attributes.Add("onclick", "javascript:if(confirm('Are you sure you want to delete?')){return true}else{return false}")
试一试


您是否可以使用
link按钮的
OnClientClick
属性,而不是在
rowdatabound
上添加属性

此外,您似乎还没有在网格视图上实际设置onrowcommand属性

例如:


是否可以使用
链接按钮的
OnClientClick
属性,而不是在
行数据绑定上添加属性

此外,您似乎还没有在网格视图上实际设置onrowcommand属性

例如:



如果有什么效果的话,这能实现什么?更改HTML中的
CommandName
后,我需要更改
RowCommand
事件处理程序的代码隐藏中的
CommandName
字段。“数据绑定控件识别某些命令名,并自动引发和处理控件的相应事件。可以识别以下命令名。。。“这显然起到了作用,但现在我遇到了JAVScript错误Sys.WebForms.PageRequestManagerServerErrorException:除非指定了DeleteMethod,否则ObjectDataSource'objdsReq'不支持删除。在gridview的标记中,可以添加几个事件:OnRowCommand、OnRowDeleted、OnRowDeleted。”。此错误表示需要将删除事件附加到gridview。我更新了我的答案,也许这对你有帮助。把这个,;返回真后;并返回false;如果有的话,这能实现什么?更改HTML中的
CommandName
后,我需要更改
RowCommand
事件处理程序的代码隐藏中的
CommandName
字段。“数据绑定控件识别某些命令名,并自动引发和处理控件的相应事件。可以识别以下命令名。。。“这显然起到了作用,但现在我遇到了JAVScript错误Sys.WebForms.PageRequestManagerServerErrorException:除非指定了DeleteMethod,否则ObjectDataSource'objdsReq'不支持删除。在gridview的标记中,可以添加几个事件:OnRowCommand、OnRowDeleted、OnRowDeleted。”。此错误表示需要将删除事件附加到gridview。我更新了我的答案,也许这对你有帮助。把这个,;返回真后;并返回false;我采用了更奇特的方法,但是我的
RowCommand
方法仍然没有被触发。我的表格中的项目被删除;但由于我的方法从未激发,该项仍然存在于数据库中。也许值得指出的是,GridView中的行已被删除。它只是不在数据库上删除,因为它从不触发
RowCommand
方法。看起来您没有连接row命令事件。请参阅修改后的答案。我已经将
asp:LinkButton
替换为
asp:Button
,因此我得到了我的功能。添加额外的行命令连接导致事件触发两次。因此,我认为这解决了我的问题。我采用了更奇特的方法,但我的
RowCommand
方法仍然没有被激发。我的表格中的项目被删除;但由于我的方法从未激发,该项仍然存在于数据库中。也许值得指出的是,GridView中的行已被删除。它只是不在数据库上删除,因为它从不触发
RowCommand
方法。看起来您没有连接row命令事件。请参阅修改后的答案。我已经将
asp:LinkButton
替换为
asp:Button
,因此我得到了我的功能。添加额外的行命令连接导致事件触发两次。所以,我认为这解决了我的问题。
lbdelete.OnClientClick = "javascript:if(confirm('Are you sure you want to delete?')){return true;}else{return false;}"
<asp:GridView ID="gvReq" runat="server" DataSourceID="objdsReq"  OnRowCommand="gvReq_RowCommand">
  <Columns>
    <asp:TemplateField HeaderText="Control">
      <ItemTemplate>
        <asp:LinkButton ID="lbdelete" runat="server" 
            CommandArgument='<%# Container.DataItemIndex %>' 
            ForeColor="Red" 
            CommandName="DeleteReq"
            OnClientClick="return confirm('Are you sure you want to delete?');"
            >Delete</asp:LinkButton>
      </ItemTemplate>
    </asp:TemplateField>  
  </Columns>
</asp:GridView>