【问题标题】:Onclick asp.net event not triggered after javascript confirmation in gridview在gridview中的javascript确认后未触发Onclick asp.net事件
【发布时间】:2016-03-17 00:21:42
【问题描述】:

在我的 gridview 上,我将一个 javascript OnClick 方法关联到一个要求确认删除有界行的链接按钮:

protected void DeleteRow_Click(object sender, EventArgs e)
    {
        GridViewRow grdrow = (GridViewRow)((LinkButton)sender).NamingContainer;
        using (ShoppingCartActions usersShoppingCart = new ShoppingCartActions())
        {
            string cartId = usersShoppingCart.GetCartId();

            int rowIndex = grdrow.RowIndex;

            //int rowIndex = ((GridViewRow)((LinkButton)e.CommandSource).NamingContainer).RowIndex;
            string itemId = ((HiddenField)CartList.Rows[rowIndex].FindControl("hiddenEncryptedItemID")).Value;
            usersShoppingCart.RemoveItemWithOptionsAndValues(cartId, itemId);
            CartList.DataBind();
            lblTotal.Text = String.Format("{0:N2}", usersShoppingCart.GetTotal());
            //return usersShoppingCart.GetCartItems();
        }
    }

出于美观的原因,我以这种方式构建了我的 ItemTemplate:

<ItemTemplate>
   <div class="divItemTotal">
       <div>
           <asp:Label runat="server" CssClass="totalItem" ID="lblItemTotalPrice" Text='<%#: String.Format("{0:N2}", ((Convert.ToDouble(Item.Quantity)) *  Convert.ToDouble(Item.UnitPrice)))%>'></asp:Label>
            <asp:Label runat="server" ID="lblCurrency2" Text=" €"></asp:Label></div>
            <asp:LinkButton OnClick="DeleteRow_Click" CssClass="removeItem imgRemoveItem" runat="server" ID="DeleteRow"></asp:LinkButton>
       </div>

在一个完美的世界中,javascript 方法应该阻止页面执行回发,并在确认后放手。不幸的是,当单击“确定”时没有任何反应,并且 ASP.net 方法永远不会被触发。更奇怪的是,如果没有 javascript 函数,asp 方法只会不时触发,我仍然对此没有任何假设。

【问题讨论】:

    标签: javascript c# asp.net gridview confirm


    【解决方案1】:

    试试这个

    <ItemTemplate>
      <div class="divItemTotal">
       <div>
          <asp:Label runat="server" CssClass="totalItem" ID="lblItemTotalPrice" Text='<%#: String.Format("{0:N2}", ((Convert.ToDouble(Item.Quantity)) *  Convert.ToDouble(Item.UnitPrice)))%>'></asp:Label>
          <asp:Label runat="server" ID="lblCurrency2" Text=" €"></asp:Label></div>
          <asp:LinkButton CommandArgument='<%# Eval("Item.Id") %>' CommandName="Delete" CssClass="removeItem imgRemoveItem" runat="server" ID="DeleteRow"></asp:LinkButton>
       </div> 
    

    代码隐藏:

    protected void CartList_RowDataBound(object sender, GridViewRowEventArgs e)
    { 
    LinkButton l = (LinkButton)e.Row.FindControl("DeleteRow"); 
    l.Attributes.Add("onclick", "javascript:return " +
    "confirm('Are you sure you want to delete this record " +
    DataBinder.Eval(e.Row.DataItem, "Item.Id") + "')");
    }
    
    
    
    protected void GridView1_RowCommand(object sender, 
                         GridViewCommandEventArgs e)
    {
     if (e.CommandName == "Delete")
     {
       // get the categoryID of the clicked row
      int categoryID = Convert.ToInt32(e.CommandArgument);
      // Delete the record 
      DeleteRecordByID(categoryID);
    // Implement this on your own :) 
    }
    }
    

    【讨论】:

    • 好的,我向前迈了一步。这两种技术(你的和我的)实际上都在起作用。当我有多个时,只有第一行被删除。我之前没有意识到这一点,因为我只用网格中的一个元素进行测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    相关资源
    最近更新 更多