DetailsView更新/插入在本地主机上工作,而不是在web服务器上工作



我发现的所有研究都在谈论那些无法让它发挥作用的人(在DetailsView中插入/更新)。我的代码在运行VS2012时有效,但在将网站复制到web服务器时无效。

细节查看链接按钮及其工作位置:

  • 编辑:开发人员和Web服务器
  • 更新:仅限开发人员
  • 取消:开发人员和Web服务器
  • 删除:开发人员和Web服务器
  • 新增:开发人员和Web服务器
  • 插入:仅限开发人员

当我将文件复制到web服务器并通过PC上的IE运行时,更新插入链接按钮在我单击它们时不会起任何作用,就好像它们没有绑定到任何东西一样。DetailsView将进入和退出编辑模式,方法是单击edit链接按钮,然后单击Cancel按钮。DetailsView将通过单击New链接按钮,然后单击Cancel按钮进入和退出插入模式

当在VS 2012中以调试模式运行时,以及如果我只是使用本地IIS上托管的localhost运行网站,上述所有功能都可以完美运行。

我已经检查了本地IIS和服务器IIS之间的设置,它们看起来是相同的。

  • web.config
  • 默认应用程序池
  • 站点设置,如身份验证、应用程序设置等

在我下面的代码中,你会注意到我有两组链接按钮。在DetailsView标记中设置的按钮,如AutoGenerateDeleteButton="true"等。我还在DetalsView的末尾定义了按钮,因为我想对它们进行更多的控制,如确认删除。如果我使用任何一种方式(一个集合被注释掉),或者如果两者都被定义,我会得到相同的结果。

这是我的代码:

<asp:DetailsView
    ID="dtvEmployee"
    runat="server"
    AutoGenerateRows="false"
    DataKeyNames="VHRID"
    DataSourceID="SqlEmployee"
    DefaultMode="ReadOnly"
    HeaderStyle-Font-Bold="true"
    HeaderStyle-Font-Underline="true"
    HeaderText="View Item..."
    GridLines="Both" AutoGenerateDeleteButton="true" AutoGenerateEditButton="true" AutoGenerateInsertButton="true">
    <Fields>
        <%-- VHRID --%>
        <asp:BoundField DataField="VHRID" HeaderText="VHRID:" ReadOnly="true" SortExpression="VHRID" Visible="true" InsertVisible="false" />
        <%-- Firstname --%>
        <asp:TemplateField HeaderText="Firstname:" SortExpression="Firstname">
            <ItemTemplate>
                <asp:TextBox ID="txtFirstname" runat="server" Text='<%# Bind("Firstname")%>' MaxLength="50" />
                <asp:RequiredFieldValidator ControlToValidate="txtFirstname" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="rfvFirstname"
                    ErrorMessage="Firstname is a required field." />
            </ItemTemplate>
        </asp:TemplateField>
        <%-- Lastname --%>
        <asp:TemplateField HeaderText="Lastname:" SortExpression="Lastname">
            <ItemTemplate>
                <asp:TextBox ID="txtLastname" runat="server" Text='<%# Bind("Lastname")%>' MaxLength="50" />
                <asp:RequiredFieldValidator ControlToValidate="txtLastname" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="rfvLastname"
                    ErrorMessage="Lastname is a required field." />
            </ItemTemplate>
        </asp:TemplateField>
        <%-- Username --%>
        <asp:TemplateField HeaderText="Username:" SortExpression="Username">
            <ItemTemplate>
                <asp:TextBox ID="txtUsername" runat="server" Text='<%# Bind("Username")%>' MaxLength="50" />
                <asp:RequiredFieldValidator ControlToValidate="txtUsername" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="rfvUsername"
                    ErrorMessage="Username is a required field." />
            </ItemTemplate>
        </asp:TemplateField>
        <%-- Email --%>
        <asp:TemplateField HeaderText="Email:" SortExpression="Email">
            <ItemTemplate>
                <asp:TextBox ID="txtEmail" runat="server" Text='<%# Bind("Email")%>' MaxLength="50" />
                <asp:RequiredFieldValidator ControlToValidate="txtEmail" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="rfvEmail"
                    ErrorMessage="Email is a required field." />
            </ItemTemplate>
        </asp:TemplateField>
        <%-- Title --%>
        <asp:TemplateField HeaderText="Title:" SortExpression="Title">
            <ItemTemplate>
                <asp:TextBox ID="txtTitle" runat="server" Text='<%# Bind("EmpTitle")%>' MaxLength="50" />
                <asp:RequiredFieldValidator ControlToValidate="txtTitle" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="rfvTitle"
                    ErrorMessage="Title is a required field." />
            </ItemTemplate>
        </asp:TemplateField>
        <%-- Location --%>
        <asp:TemplateField HeaderText="Location:" SortExpression="Location">
            <ItemTemplate>
                <asp:TextBox ID="txtLocation" runat="server" Text='<%# Bind("Location")%>' MaxLength="50" Visible="false" />
                <asp:RequiredFieldValidator ControlToValidate="txtLocation" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="rfvLocation"
                    ErrorMessage="Location is a required field." />
                <asp:DropDownList ID="ddlLocation" runat="server"
                    OnSelectedIndexChanged="ddlLocation_SelectedIndexChanged"
                    AutoPostBack="true"
                    Width="300">
                    <asp:ListItem Text="PHX" Value="PHX" />
                    <asp:ListItem Text="DEN" Value="DEN" />
                    <asp:ListItem Text="LAS" Value="LAS" />
                    <asp:ListItem Text="NOG" Value="NOG" />
                    <asp:ListItem Text="RENO" Value="RENO" />
                    <asp:ListItem Text="TUC" Value="TUC" />
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
        <%-- Office Number --%>
        <asp:TemplateField HeaderText="Office Number:" SortExpression="OfficeNumber">
            <ItemTemplate>
                <asp:TextBox ID="txtOfficeNumber" runat="server" Text='<%# Bind("OfficeNumber")%>' MaxLength="50" Visible="false" />
                <asp:RequiredFieldValidator ControlToValidate="txtOfficeNumber" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="rfvOfficeNumber"
                    ErrorMessage="Office Number is a required field." />
                <asp:DropDownList ID="ddlOfficeNumber" runat="server"
                    OnSelectedIndexChanged="ddlOfficeNumber_SelectedIndexChanged"
                    AppendDataBoundItems="true"
                    AutoPostBack="true"
                    CausesValidation="false"
                    DataSourceID="sqlOfficeNumbers"
                    DataTextField="OfficeNumber"
                    DataValueField="Room_Num"
                    Width="300">
                    <asp:ListItem Text="None" Value="0"></asp:ListItem>
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
        <%-- Office Phone --%>
        <asp:TemplateField HeaderText="Office Phone:" SortExpression="OfficePhone">
            <ItemTemplate>
                <asp:TextBox ID="txtOfficePhone" runat="server" Text='<%# Bind("OfficePhone")%>' MaxLength="50"  />
                <asp:RequiredFieldValidator ControlToValidate="txtOfficePhone" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="rfvOfficePhone"
                    ErrorMessage="Office Phone is a required field." />
                <asp:RegularExpressionValidator ControlToValidate="txtOfficePhone" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="revOfficePhone"
                    ValidationExpression="^[2-9]d{2}d{3}d{4}$" EnableClientScript="false"
                    ErrorMessage="Office Phone must be 9 numeric digits." />
            </ItemTemplate>
        </asp:TemplateField>
        <%-- Show Photo --%>
        <asp:TemplateField HeaderText="Show Photo:" SortExpression="ShowPhoto">
            <ItemTemplate>
                <asp:CheckBox ID="chkShowPhoto" runat="server" Checked='<%# Bind("ShowPhoto")%>' />
            </ItemTemplate>
        </asp:TemplateField>
        <%-- Status --%>
        <asp:TemplateField HeaderText="Status:" SortExpression="Status">
            <ItemTemplate>
                <asp:TextBox ID="txtStatus" runat="server" Text='<%# Bind("Status")%>' MaxLength="50" Visible="false" />
                <asp:RequiredFieldValidator ControlToValidate="txtStatus" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="rfvStatus"
                    ErrorMessage="Status is a required field." />
                <asp:DropDownList ID="ddlStatus" runat="server"
                    OnSelectedIndexChanged="ddlStatus_SelectedIndexChanged"
                    AutoPostBack="true"
                    Width="300">
                    <asp:ListItem Text="Active" Value="Active" />
                    <asp:ListItem Text="Terminated" Value="Terminated" />
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
        <%-- LinkButtons and the modes they show up in --%>
        <asp:TemplateField>
            <ItemTemplate>
                <%-- DetailsView - ReadOnly Mode --%>
                <asp:linkbutton ID="lnkEdit" Text="Edit" runat="server" CommandName="Edit" CausesValidation="false"></asp:linkbutton>
                <asp:LinkButton ID="lnkDelete" Text="Delete" runat="server" CommandName="Delete" CausesValidation="false" OnClientClick="return confirm('Are you sure you want to delete this record?');"></asp:LinkButton>
                <asp:linkbutton ID="lnkNew" Text="New" runat="server" CommandName="New" CausesValidation="false"></asp:linkbutton>
            </ItemTemplate>
            <EditItemTemplate>
                <%-- DetailsView - Edit Mode --%>
                <asp:linkbutton ID="lnkUpdate" Text="Update" runat="server" CommandName="Update"></asp:linkbutton>
                <asp:linkbutton ID="lnkCancel" Text="Cancel" runat="server" CommandName="Cancel" CausesValidation="false"></asp:linkbutton>
            </EditItemTemplate>
            <InsertItemTemplate>
                <%-- DetailsView - Insert Mode --%>
                <asp:linkbutton ID="lnkInsert" Text="Insert" runat="server" CommandName="Insert"></asp:linkbutton>
                <asp:linkbutton ID="lnkCancel" Text="Cancel" runat="server" CommandName="Cancel" CausesValidation="false"></asp:linkbutton>
            </InsertItemTemplate>
        </asp:TemplateField>
    </Fields>
</asp:DetailsView>

这是SQLDatasource:

<%-- For DetailsView --%>
<asp:SqlDataSource ID="SqlEmployee" runat="server"
    ConnectionString="<%$ ConnectionStrings:DWStageConnectionString %>"
    DeleteCommand="UPDATE [MasterTempEmployeeStage] SET
        [IsDeleted] = 1
        WHERE [VHRID] = @VHRID"
    InsertCommand="INSERT INTO [MasterTempEmployeeStage] (
        [Firstname], [Lastname]
        , [Location], [Username]
        , [Email], [EmpTitle]
        , [OfficeNumber], [OfficePhone]
        , [ShowPhoto], [Status]
        ) VALUES (
        @Firstname, @Lastname
        , @Location, @Username
        , @Email, @EmpTitle
        , @OfficeNumber, @OfficePhone
        , @ShowPhoto, @Status);
        SELECT @VHRID = SCOPE_IDENTITY();"
    SelectCommand="SELECT [VHRID]
        , [Firstname], [Lastname]
        , [Location], [Username]
        , [Email], [EmpTitle]
        , [OfficeNumber], [OfficePhone]
        , [ShowPhoto], [Status]
        FROM [MasterTempEmployeeStage]
        WHERE [VHRID] = @VHRID
        ORDER BY [Lastname], [Firstname]"
    UpdateCommand="UPDATE [MasterTempEmployeeStage] SET
        [Firstname] = @Firstname
        , [Lastname] = @Lastname
        , [Location] = @Location
        , [Username] = @Username
        , [Email] = @Email
        , [EmpTitle] = @EmpTitle
        , [OfficeNumber] = @OfficeNumber
        , [OfficePhone] = @OfficePhone
        , [ShowPhoto] = @ShowPhoto
        , [Status] = @Status
        WHERE [VHRID] = @VHRID">
    <SelectParameters>
        <asp:ControlParameter ControlID="ddlEmployees" PropertyName="SelectedValue" Name="VHRID" />
    </SelectParameters>
    <DeleteParameters>
        <asp:ControlParameter ControlID="ddlEmployees" PropertyName="SelectedValue" Name="VHRID" />
    </DeleteParameters>
    <InsertParameters>
        <asp:Parameter Name="VHRID" Direction="Output" Type="Int32" />
        <asp:Parameter Name="Firstname" Type="String" />
        <asp:Parameter Name="Lastname" Type="String" />
        <asp:Parameter Name="Location" Type="String" />
        <asp:Parameter Name="Username" Type="String" />
        <asp:Parameter Name="Email" Type="String" />
        <asp:Parameter Name="EmpTitle" Type="String" />
        <asp:Parameter Name="OfficeNumber" Type="String" />
        <asp:Parameter Name="OfficePhone" Type="String" />
        <asp:Parameter Name="ShowPhoto" Type="String" />
        <asp:Parameter Name="Status" Type="String" />
    </InsertParameters>
    <UpdateParameters>
        <asp:Parameter Name="Firstname" Type="String" />
        <asp:Parameter Name="Lastname" Type="String" />
        <asp:Parameter Name="Location" Type="String" />
        <asp:Parameter Name="Username" Type="String" />
        <asp:Parameter Name="Email" Type="String" />
        <asp:Parameter Name="EmpTitle" Type="String" />
        <asp:Parameter Name="OfficeNumber" Type="String" />
        <asp:Parameter Name="OfficePhone" Type="String" />
        <asp:Parameter Name="ShowPhoto" Type="String" />
        <asp:Parameter Name="Status" Type="String" />
        <%--<asp:Parameter Name="VHRID" Type="Int32" />--%>
        <asp:ControlParameter ControlID="ddlEmployees" PropertyName="SelectedValue" Name="VHRID" />
    </UpdateParameters>
</asp:SqlDataSource>

找到了解决方案,我不知道为什么它能在我的Dev PC上工作,而不是真正的web服务器,但它就在这里。

我不得不在"插入"one_answers"更新"链接按钮上设置CausesValidation="false"。如果在DetailsView定义中使用AutoGenerateEditButton="true"*和其他选项,则无法设置此项。

作为测试I:

  • 删除了我在DetailsView底部附近定义的链接按钮
  • 在DetailsView标记中保留了自动选项
  • 删除了所有验证器

将以上内容复制到web服务器,一切正常。因此,在"更新"one_answers"插入"链接按钮上未将CausesValidation设置为false会阻止它们启动。既然我想要验证器,我就这么做了。。。

  • 从DetailsView中删除了自动生成链接按钮
  • 使用DetailsView底部附近的链接按钮
  • 在更新和插入链接按钮上将CausesValidation设置为false
  • 放回我的验证器

现在一切正常。

请参阅下面的新代码:

<asp:DetailsView
    ID="dtvEmployee"
    runat="server"
    AutoGenerateRows="false"
    DataKeyNames="VHRID"
    DataSourceID="SqlEmployee"
    DefaultMode="ReadOnly"
    HeaderStyle-Font-Bold="true"
    HeaderStyle-Font-Underline="true"
    HeaderText="View Item..."
    GridLines="Both">
    <Fields>
        <%-- VHRID --%>
        <asp:BoundField DataField="VHRID" HeaderText="VHRID:" ReadOnly="true" SortExpression="VHRID" Visible="true" InsertVisible="false" />
        <%-- Firstname --%>
        <asp:TemplateField HeaderText="Firstname:" SortExpression="Firstname">
            <ItemTemplate>
                <asp:TextBox ID="txtFirstname" runat="server" Text='<%# Bind("Firstname")%>' MaxLength="50" />
                <asp:RequiredFieldValidator ControlToValidate="txtFirstname" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="rfvFirstname"
                    ErrorMessage="Firstname is a required field." />
            </ItemTemplate>
        </asp:TemplateField>
        <%-- Lastname --%>
        <asp:TemplateField HeaderText="Lastname:" SortExpression="Lastname">
            <ItemTemplate>
                <asp:TextBox ID="txtLastname" runat="server" Text='<%# Bind("Lastname")%>' MaxLength="50" />
                <asp:RequiredFieldValidator ControlToValidate="txtLastname" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="rfvLastname"
                    ErrorMessage="Lastname is a required field." />
            </ItemTemplate>
        </asp:TemplateField>
        <%-- Username --%>
        <asp:TemplateField HeaderText="Username:" SortExpression="Username">
            <ItemTemplate>
                <asp:TextBox ID="txtUsername" runat="server" Text='<%# Bind("Username")%>' MaxLength="50" />
                <asp:RequiredFieldValidator ControlToValidate="txtUsername" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="rfvUsername"
                    ErrorMessage="Username is a required field." />
            </ItemTemplate>
        </asp:TemplateField>
        <%-- Email --%>
        <asp:TemplateField HeaderText="Email:" SortExpression="Email">
            <ItemTemplate>
                <asp:TextBox ID="txtEmail" runat="server" Text='<%# Bind("Email")%>' MaxLength="50" />
                <asp:RequiredFieldValidator ControlToValidate="txtEmail" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="rfvEmail"
                    ErrorMessage="Email is a required field." />
            </ItemTemplate>
        </asp:TemplateField>
        <%-- Title --%>
        <asp:TemplateField HeaderText="Title:" SortExpression="Title">
            <ItemTemplate>
                <asp:TextBox ID="txtTitle" runat="server" Text='<%# Bind("EmpTitle")%>' MaxLength="50" />
                <asp:RequiredFieldValidator ControlToValidate="txtTitle" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="rfvTitle"
                    ErrorMessage="Title is a required field." />
            </ItemTemplate>
        </asp:TemplateField>
        <%-- Location --%>
        <asp:TemplateField HeaderText="Location:" SortExpression="Location">
            <ItemTemplate>
                <asp:TextBox ID="txtLocation" runat="server" Text='<%# Bind("Location")%>' MaxLength="50" Visible="false" />
                <asp:RequiredFieldValidator ControlToValidate="txtLocation" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="rfvLocation"
                    ErrorMessage="Location is a required field." />
                <asp:DropDownList ID="ddlLocation" runat="server"
                    OnSelectedIndexChanged="ddlLocation_SelectedIndexChanged"
                    AutoPostBack="true"
                    Width="300">
                    <asp:ListItem Text="PHX" Value="PHX" />
                    <asp:ListItem Text="DEN" Value="DEN" />
                    <asp:ListItem Text="LAS" Value="LAS" />
                    <asp:ListItem Text="NOG" Value="NOG" />
                    <asp:ListItem Text="RENO" Value="RENO" />
                    <asp:ListItem Text="TUC" Value="TUC" />
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
        <%-- Office Number --%>
        <asp:TemplateField HeaderText="Office Number:" SortExpression="OfficeNumber">
            <ItemTemplate>
                <asp:TextBox ID="txtOfficeNumber" runat="server" Text='<%# Bind("OfficeNumber")%>' MaxLength="50" Visible="false" />
                <asp:RequiredFieldValidator ControlToValidate="txtOfficeNumber" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="rfvOfficeNumber"
                    ErrorMessage="Office Number is a required field." />
                <asp:DropDownList ID="ddlOfficeNumber" runat="server"
                    OnSelectedIndexChanged="ddlOfficeNumber_SelectedIndexChanged"
                    AppendDataBoundItems="true"
                    AutoPostBack="true"
                    CausesValidation="false"
                    DataSourceID="sqlOfficeNumbers"
                    DataTextField="OfficeNumber"
                    DataValueField="Room_Num"
                    Width="300">
                    <asp:ListItem Text="None" Value="0"></asp:ListItem>
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
        <%-- Office Phone --%>
        <asp:TemplateField HeaderText="Office Phone:" SortExpression="OfficePhone">
            <ItemTemplate>
                <asp:TextBox ID="txtOfficePhone" runat="server" Text='<%# Bind("OfficePhone")%>' MaxLength="50"  />
                <asp:RequiredFieldValidator ControlToValidate="txtOfficePhone" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="rfvOfficePhone"
                    ErrorMessage="Office Phone is a required field." />
                <asp:RegularExpressionValidator ControlToValidate="txtOfficePhone" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="revOfficePhone"
                    ValidationExpression="^[2-9]d{2}d{3}d{4}$" EnableClientScript="false"
                    ErrorMessage="Office Phone must be 9 numeric digits." />
            </ItemTemplate>
        </asp:TemplateField>
        <%-- Show Photo --%>
        <asp:TemplateField HeaderText="Show Photo:" SortExpression="ShowPhoto">
            <ItemTemplate>
                <asp:CheckBox ID="chkShowPhoto" runat="server" Checked='<%# Bind("ShowPhoto")%>' />
            </ItemTemplate>
        </asp:TemplateField>
        <%-- Status --%>
        <asp:TemplateField HeaderText="Status:" SortExpression="Status">
            <ItemTemplate>
                <asp:TextBox ID="txtStatus" runat="server" Text='<%# Bind("Status")%>' MaxLength="50" Visible="false" />
                <asp:RequiredFieldValidator ControlToValidate="txtStatus" runat="server"
                    Display="Dynamic" ForeColor="Red" ID="rfvStatus"
                    ErrorMessage="Status is a required field." />
                <asp:DropDownList ID="ddlStatus" runat="server"
                    OnSelectedIndexChanged="ddlStatus_SelectedIndexChanged"
                    AutoPostBack="true"
                    Width="300">
                    <asp:ListItem Text="Active" Value="Active" />
                    <asp:ListItem Text="Terminated" Value="Terminated" />
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
        <%-- LinkButtons and the modes they show up in --%>
        <asp:TemplateField>
            <ItemTemplate>
                <%-- DetailsView - ReadOnly Mode --%>
                <asp:linkbutton ID="lnkEdit" Text="Edit" runat="server" CommandName="Edit" CausesValidation="false"></asp:linkbutton>
                <asp:LinkButton ID="lnkDelete" Text="Delete" runat="server" CommandName="Delete" CausesValidation="false" OnClientClick="return confirm('Are you sure you want to delete this record?');"></asp:LinkButton>
                <asp:linkbutton ID="lnkNew" Text="New" runat="server" CommandName="New" CausesValidation="false"></asp:linkbutton>
            </ItemTemplate>
            <EditItemTemplate>
                <%-- DetailsView - Edit Mode --%>
                <asp:linkbutton ID="lnkUpdate" Text="Update" runat="server" CommandName="Update" CausesValidation="false"></asp:linkbutton>
                <asp:linkbutton ID="lnkCancel" Text="Cancel" runat="server" CommandName="Cancel" CausesValidation="false"></asp:linkbutton>
            </EditItemTemplate>
            <InsertItemTemplate>
                <%-- DetailsView - Insert Mode --%>
                <asp:linkbutton ID="lnkInsert" Text="Insert" runat="server" CommandName="Insert" CausesValidation="false"></asp:linkbutton>
                <asp:linkbutton ID="lnkCancel" Text="Cancel" runat="server" CommandName="Cancel" CausesValidation="false"></asp:linkbutton>
            </InsertItemTemplate>
        </asp:TemplateField>
    </Fields>
</asp:DetailsView>

最新更新