如何在ASP.NET GridView中驻留的ASP.NET LinkBut​​ton的click事件中显示消息?

时间:2016-01-08 17:38:51

标签: c# asp.net gridview webforms objectdatasource

我是新的ASP.NET Web Forms开发人员,我正在尝试使用带有Repository Pattern的ObjectDataSource开发一个简单的应用程序。我现在正在努力解决与ASP.NET GridView控件中的ASP.NET LinkBut​​ton相关的两个问题。这些问题与位于GridView内部的Delete LinkBut​​ton的click事件有关。

这是我的ASP.NET代码:

<asp:UpdatePanel ID="upView" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
<asp:Label ID="lblMessage" runat="server" Text="" CssClass="lead text-info"></asp:Label>
                        <asp:GridView ID="gvProducts" runat="server" AutoGenerateColumns="false"
                            DataSourceID="odsProduct" DataKeyNames="Id"
                            CssClass="table table-bordered table-striped">
                            <Columns>
                                <asp:TemplateField ShowHeader="False">
                                    <ItemTemplate>
                                        <asp:LinkButton ID="lbtnEdit"
                                            runat="server"
                                            CssClass="btn btn-info btn-sm"
                                            CommandName="Edit"
                                            Text="Edit" />
                                    </ItemTemplate>
                                    <EditItemTemplate>
                                        <asp:LinkButton ID="lbtnUpdate"
                                            runat="server"
                                            CssClass="btn btn-success btn-sm"
                                            CommandName="Update"
                                            Text="Update" />
                                        <%--&nbsp;--%>
                                        <asp:LinkButton ID="lbtnCancel"
                                            runat="server"
                                            CssClass="btn btn-default btn-sm"
                                            CommandName="Cancel"
                                            Text="Cancel" />
                                    </EditItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField>
                                    <ItemTemplate>
                                        <span onclick="return confirm('Are you certain you want to delete this 
                                                product?');">
                                            <asp:LinkButton ID="lbtnDelete" runat="server"
                                                CssClass="btn btn-danger btn-sm"
                                                CommandName="Delete">
                                            <span class="glyphicon glyphicon-trash"></span> Delete
                                            </asp:LinkButton>
                                        </span>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:BoundField DataField="Id" HeaderText="Id" SortExpression="Id" ItemStyle-VerticalAlign="Top" />
                                <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" ItemStyle-VerticalAlign="Top" />
                                <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" ItemStyle-VerticalAlign="Top" />
                                <asp:BoundField DataField="UnitPrice" HeaderText="Unit Price" SortExpression="UnitPrice" />
                            </Columns>
                        </asp:GridView>
                        <asp:ObjectDataSource ID="odsProduct" runat="server"
                            TypeName="ThinkSafetyFirst_DatabaseFirst.BLL.ProductBL"
                            DataObjectTypeName="ThinkSafetyFirst_DatabaseFirst.Models.TTSF_Product"
                            SelectMethod="GetProducts"
                            DeleteMethod="DeleteProduct"
                            UpdateMethod="UpdateProduct">
                        </asp:ObjectDataSource>
                </ContentTemplate>
            </asp:UpdatePanel>
  1. 我想在用户点击“删除”按钮后显示Javascript警报消息。代码如上所示,但当用户点击按钮并且我不知道原因时,消息不显示。

  2. 删除功能运行良好,但我想在驻留在GridView控件之外的ASP.NET Label控件上显示失败成功的消息。

  3. 您能否告诉我如何解决这两个问题?

    更新

    正如您在我的ASP.NET代码中看到的,我正在使用带有Repository Pattern的ObjectDataSource。这是产品模型的业务逻辑的C#代码:

    public void DeleteProduct(TTSF_Product product)
            {
                try
                {
                    productRepository.DeleteProduct(product);
                }
                catch (Exception ex)
                {
                    //Include catch blocks for specific exceptions first,
                    //and handle or log the error as appropriate in each.
                    //Include a generic catch block like this one last.
                    throw ex;
                }
            }
    

    那么如何才能在Deletion方法上显示消息?请注意,我有一个ASP.NET Label控件驻留在GridView控件之外。

    提前感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

要在GridView上进行确认,您可以使用Javascript Confirm并使用OnClientClick事件调用客户端脚本。您可以删除span元素。 itemtemplate的代码应如下所示。

OnClientClick 获取或设置在引发Button控件的Click事件时执行的客户端脚本。

<asp:TemplateField>
  <ItemTemplate>
      <asp:LinkButton ID="lbtnDelete" runat="server" OnClientClick="return confirm('Are you sure you want to delete this Product?');"
          CssClass="btn btn-danger btn-sm" CommandName="Delete">
        <span class="glyphicon glyphicon-trash"></span>Delete</asp:LinkButton>
  </ItemTemplate>
</asp:TemplateField>

用于在驻留在GridView控件之外的ASP.NET Label控件上显示失败成功的错误消息。您可以使用GridView RowCommand事件。

protected void GridView1_RowCommand(object sender,  GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Delete")
            {
                if (success) { lblResult.Text = "Success"; }
                else { lblResult.Text = "Failure"; }
            }
        }

编辑2:显示消息的更新。如果您使用存储库模式并不重要,您只需要在 DeleteProduct 方法中放置Label代码。修改了DeleteProduct方法的代码,将 LabelControlID 替换为Label Control的实际ID。

public void DeleteProduct(TTSF_Product product)
        {
            try
            {
                productRepository.DeleteProduct(product);
                LabelControlID.Text = "Success";
            }
            catch (Exception ex)
            {
                //Include catch blocks for specific exceptions first,
                //and handle or log the error as appropriate in each.
                //Include a generic catch block like this one last.
               LabelControlID.Text = "Failure"; 
               throw ex;
            }
        } 

答案 1 :(得分:1)

处理YourOjbectDataSource_Selected事件。

在您的存储库中:

        if (error)
        {
            throw new YourException(ErrorMessage);
        }

在你的aspx中:

protected void YourOjbectDataSource_Selected(object sender, ObjectDataSourceStatusEventArgs e)
    {
        if (e.Exception != null)
        {
            if (e.Exception.InnerException is YourException)
            {
                e.ExceptionHandled = true;
                lblErrorMessage.Text = e.Exception.InnerException.Message;
            }
        }
    }

答案 2 :(得分:0)

您可以使用GridView的RowCommand事件来捕获正在触发的命令(&#34;更新&#34;,&#34;取消&#34;等)并在该方法中处理它。 https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowcommand%28v=vs.110%29.aspx