使用母版页插入和更新推送

本文关键字:更新 插入 母版页 | 更新日期: 2023-09-27 18:06:58

我们目前正在将我们的asp经典页面更新到ASP.net,并且在我们的工具集中受到限制(只有在VS 2013中ASP.net可用的工具)。我们的web应用程序是MSSQL数据库(SQL Server 2008)的前端。我们遇到了一个问题,插入和更新命令从FormView。当我们不使用母版页时,一切都工作得很好,但是当我们应用母版页和内容占位符时,数据就不会推送了。我们可以很好地删除记录,但我们不能获得数据来更改/插入到表中。当insert命令运行时,它创建一个没有数据的新记录。我们尝试了使用ClientID设置的所有变体和视图状态模式(这是我们认为问题所在)。如有任何帮助,不胜感激。

页眉

<%@ Page Title="TEST" Language="C#" MasterPageFile="~/MASTERSTYLE/MXGWeb.master" AutoEventWireup="True" CodeFile="Default2.aspx.cs" Inherits="ETO_Trax_Default2" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Head" Runat="Server"></asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server" ClientIDMode="Static">
表单视图

<asp:FormView ID="ETOFormView" runat="server" DataSourceID="ETOFormSQLDataSource" OnItemUpdated="ETOFormView_ItemUpdated" OnItemDeleted="ETOFormView_ItemDeleted"  DataKeyNames="ID">
<EditItemTemplate>
ID:<asp:Label Text='<%# Eval("ID") %>' runat="server" ID="IDLabel1" /><br />
ETOType: <asp:TextBox Text='<%# Bind("ETOType") %>' runat="server" ID="ETOTypeTextBox"/><br />
<asp:LinkButton runat="server" Text="Update" CommandName="Update" ID="UpdateButton" CausesValidation="True" />&nbsp;<asp:LinkButton runat="server" Text="Cancel" CommandName="Cancel" ID="UpdateCancelButton" CausesValidation="False" />
</EditItemTemplate>
<InsertItemTemplate>
ETOType:<asp:TextBox Text='<%# Bind("ETOType") %>' runat="server" ID="ETOTypeTextBox" /><br />    
<asp:LinkButton runat="server" Text="Insert" CommandName="Insert" ID="InsertButton" CausesValidation="True" />&nbsp;<asp:LinkButton runat="server" Text="Cancel" CommandName="Cancel" ID="InsertCancelButton" CausesValidation="False" />
</InsertItemTemplate>
<ItemTemplate>
ID:<asp:Label Text='<%# Eval("ID") %>' runat="server" ID="IDLabel" /><br />
ETOType:<asp:Label Text='<%# Bind("ETOType") %>' runat="server" ID="ETOTypeLabel" /><br />
<asp:LinkButton runat="server" Text="Edit" CommandName="Edit" ID="EditButton" CausesValidation="False" />&nbsp;<asp:LinkButton runat="server" Text="Delete" CommandName="Delete" ID="DeleteButton" CausesValidation="False" />&nbsp;<asp:LinkButton runat="server" Text="New" CommandName="New" ID="NewButton" CausesValidation="False" />
</ItemTemplate>
</asp:FormView>

SQL数据源:

<asp:SqlDataSource ID="ETOFormSQLDataSource" runat="server" ConnectionString='<%$ ConnectionStrings:SQLConnectionString %>’
    DeleteCommand="DELETE FROM [TABLE] WHERE [ID] = @ID"
    InsertCommand="INSERT INTO [TABLE] ([VALUE]) VALUES (@VALUE) SELECT @ID = SCOPE_IDENTITY()"
    SelectCommand="SELECT * FROM [TABLE] WHERE [ID] = @ID"
    UpdateCommand="UPDATE TABLE SET VALUE=@VALUE WHERE ID=@ID" 
    OnInserted="ETOFormSQLDataSource_Inserted">
<SelectParameters>
        <asp:Parameter Name="ID" Type="Int32" DefaultValue="0" />
    </SelectParameters>
    <DeleteParameters>
        <asp:Parameter Name="ID" Type="Int32"></asp:Parameter>
    </DeleteParameters>
    <InsertParameters>
        <asp:Parameter Name="ID" Direction="Output" Type="int32"></asp:Parameter>
    </InsertParameters>
</asp:SqlDataSource>

使用母版页插入和更新推送

InsertParameters集合只有一个参数是输出参数,因此它不能插入任何值,因为它不知道如何传递该信息:

<InsertParameters>
 <asp:Parameter Name="ID" Direction="Output" Type="int32"></asp:Parameter>
 <asp:Parameter Name="ETOType" Type="WhateverItIs"></asp:Parameter>
</InsertParameters>

注意,新参数被命名为ETOType,因为这是视图中用来绑定控件的名称。

甚至添加所需的参数我认为不会工作,因为INSERT sql命令应该变成:

INSERT INTO [TABLE] ([VALUE]) VALUES (@ETOType) SELECT @ID = SCOPE_IDENTITY()

这是因为在视图代码中ETOTypeBind内部使用的名称,也分配给参数,这是绑定器所期望的值。

不确定,但可能INSERT查询的正确语法应该是带有语句终止符:

INSERT INTO [TABLE] ([VALUE]) VALUES (@ETOType); SELECT @ID = SCOPE_IDENTITY();