paul_vin Ответов: 0

Я вставляю данные в ASP .NET grid на событии rowcommand он вставляет данные но когда я обновляю страницу с помощью f5 та же запись вставляется снова


I am inserting data in asp .net grid on RowCommand event it is inserting data but when I am refreshing page using f5 or(selecting url and then press enter)  same record get inserted again


Что я уже пробовал:

У меня есть вид сетки Asp следующим образом

<asp:GridView ID="GridViewRow" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" 
            CellPadding="3" DataKeyNames="Id" GridLines="Vertical" ShowFooter="true"
            OnRowCommand="GridViewRow_RowCommand" OnRowEditing="GridViewRow_RowEditing" OnRowCancelingEdit="GridViewRow_RowCancelingEdit" 
            OnRowUpdating="GridViewRow_RowUpdating" OnRowDeleting="GridViewRow_RowDeleting">
            <AlternatingRowStyle BackColor="#DCDCDC" />
            <Columns>
                <asp:TemplateField HeaderText="Id" InsertVisible="False" SortExpression="Id">
                    <EditItemTemplate>
                        <asp:Label ID="lblId" runat="server" Text='<%# Eval("Id") %>'></asp:Label>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("Id") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="FirstName" SortExpression="FirstName">
                    <EditItemTemplate>
                        <asp:TextBox ID="txtFirstName" runat="server" Text='<%# Bind("FirstName") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblFirstName" runat="server" Text='<%# Bind("FirstName") %>'></asp:Label>
                    </ItemTemplate>
                    <FooterTemplate>
                        <asp:TextBox ID="txtFirstNameFooter" runat="server"></asp:TextBox>
                    </FooterTemplate>
                </asp:TemplateField>
                
                <asp:TemplateField HeaderText="LastName" SortExpression="LastName">
                    <EditItemTemplate>
                        <asp:TextBox ID="txtLastName" runat="server" Text='<%# Bind("LastName") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblLastName" runat="server" Text='<%# Bind("LastName") %>'></asp:Label>
                    </ItemTemplate>
                    <FooterTemplate>
                        <asp:TextBox runat="server" ID="txtLastNameFooter"></asp:TextBox>
                    </FooterTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="Contact" SortExpression="Contact">
                    <EditItemTemplate>
                        <asp:TextBox ID="txtContact" runat="server" Text='<%# Bind("Contact") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblContact" runat="server" Text='<%# Bind("Contact") %>'></asp:Label>
                    </ItemTemplate>
                    <FooterTemplate>
                        <asp:TextBox ID="txtContactFooter" runat="server"></asp:TextBox>
                    </FooterTemplate>
                </asp:TemplateField>

                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:Button ID="btnEdit" runat="server" Text="Edit" CommandName="Edit"/>
                        <asp:Button ID="btnDelete" runat="server" Text="Delete" CommandName="Delete"/>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:Button ID="btnUpdate" runat="server" Text="Update" CommandName="Update" />
                        <asp:Button ID="btnCancel" runat="server" Text="Cancel" CommandName="Cancel"/>
                    </EditItemTemplate>
                    <FooterTemplate>
                        <asp:Button ID="btnAddNew" runat="server" CommandName="AddNew" Text="Add New"/>
                    </FooterTemplate>
                </asp:TemplateField>

            </Columns>
            

        </asp:GridView>



в шаблоне footeer у меня есть кнопка для вставки данных
<FooterTemplate>
                       <asp:Button ID="btnAddNew" runat="server" CommandName="AddNew" Text="Add New"/>
                   </FooterTemplate>


Когда я вставляю кнопку Добавить новую это вставка данных текстового поля в базу данных
но когда я обновляю после вставки (предположим, я нажимаю f5, то он снова вставляет те же данные)

код вставки кнопки выглядит следующим образом (записывается на
RowCommand
событие), в котором у меня есть имя команды checkd как
if (e.CommandName.Equals("AddNew"))


весь код для вставки данных в сетку выглядит следующим образом

protected void GridViewRow_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                if (e.CommandName.Equals("AddNew"))
                {
                    using (SqlConnection con = new SqlConnection(strConStr))
                    {
                        SqlCommand cmd = new SqlCommand("SP_InsertPhoneBook", con);
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.AddWithValue("@FirstName", (GridViewRow.FooterRow.FindControl("txtFirstNameFooter") as TextBox).Text.Trim());
                        cmd.Parameters.AddWithValue("@LastName", (GridViewRow.FooterRow.FindControl("txtLastNameFooter") as TextBox).Text.Trim());
                        cmd.Parameters.AddWithValue("@Contact", (GridViewRow.FooterRow.FindControl("txtContactFooter") as TextBox).Text.Trim());
                        cmd.Parameters.AddWithValue("@Email", (GridViewRow.FooterRow.FindControl("txtEmailFooter") as TextBox).Text.Trim());
                        con.Open();
                        cmd.ExecuteNonQuery();

                    }
                }
            }
            catch (Exception ex)
            {

                string str=ex.Message.ToString();
            }
            finally
            {
                populateGrid();
            }
        }


но когда я обновляю страницу с помощью f5 после вставки записи, то
GridViewRow_RowCommand
даже стреляет и он вставляет то, что когда-либо у меня было вставить предыдущие данные

как я могу предотвратить это

ZurdoDev

При обновлении записи на странице появляется обратная связь. Так что да, если вы нажмете F5, вы обновите обратную передачу, чтобы она вставлялась снова.

Richard Deeming

Вам нужно реализовать шаблон "POST-REDIRECT-GET".

Насколько это будет легко, будет зависеть от того, сколько состояния вам нужно сохранить на странице. (Например: сортировка сетки / подкачка страниц; параметры фильтрации; другие элементы управления и т. д.)

0 Ответов