0

Given the following GridView code:

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

In the RowDataBound event, JavaScript code is added:

Protected Sub gvReq_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvReq.RowDataBound
  If (e.Row.RowType = DataControlRowType.DataRow) Then
    Dim lbdelete As LinkButton = e.Row.Cells(DELETE_CELL).Controls.Item(1)
    lbdelete.Attributes.Add("onclick", "javascript:if(confirm('Are you sure you want to delete?')){return true}else{return false}")

The JavaScript fires, but the RowCommand event will never fire - I'm guessing because it is only handled by the 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

The JavaScript confirmation dialog was put there by requirement by Management.

Now, how do I get the RowCommand Event Handler to fire if someone clicks OK to the JavaScript confirm box?

4

2 に答える 2

3

に属性を追加する代わりに、のOnClientClick属性を使用できますか?LinkButtonrowdatabound

また、グリッド ビューで onrowcommand 属性を実際に設定していないようです。

例えば:

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

リンクボタンのポストバックではjavascriptが大きな役割を果たしていると信じているので、OnClickデータバインドされた行に追加すると、ポストバックjavascriptに影響します。

また、デフォルトの JavaScript 確認を使用する代わりに、これを行うための少し「洗練された」方法については、この記事を参照してください。

于 2013-07-08T23:37:34.237 に答える