C# 这是FormView错误吗?

C# 这是FormView错误吗?,c#,asp.net,linq,linq-to-sql,formview,C#,Asp.net,Linq,Linq To Sql,Formview,我有一个绑定到ASP.NET页面上LinqDataSource的FormView(已启用分页)。我正在经历一些非常奇怪的行为,不知道为什么会发生。为了简单起见,在这个问题上,我删除了一些不需要的代码(其他FormView模板等)来演示此行为 我的FormView有3个字段,两个文本框和一个下拉列表。DropDownList绑定到页面上的另一个LinqDataSource并包含外键值。当FormView的LinqDataSource仅包含一条记录,并且我尝试更新它时,更新失败,因为DropDown

我有一个绑定到ASP.NET页面上LinqDataSource的FormView(已启用分页)。我正在经历一些非常奇怪的行为,不知道为什么会发生。为了简单起见,在这个问题上,我删除了一些不需要的代码(其他FormView模板等)来演示此行为

我的FormView有3个字段,两个文本框和一个下拉列表。DropDownList绑定到页面上的另一个LinqDataSource并包含外键值。当FormView的LinqDataSource仅包含一条记录,并且我尝试更新它时,更新失败,因为DropDownList的选定值始终为空,无论我为它选择哪个值。当FormView的LinqDataSource包含2条或更多记录时,它会正常工作

现在有件很奇怪的事。由于FormView的页面设置,更新实际上失败了!当我只使用默认的寻呼机设置时,一切正常。当我将页面模式更改为
nextprevousfirstlast
时,更新失败

以下是我的FormView及其数据源:

<asp:FormView ID="fvData" runat="server" AllowPaging="True" 
    DataKeyNames="ID" DataSourceID="ldsData" DefaultMode="Edit">
    <EditItemTemplate>
        <table class="pad5">
            <tr>
                <td class="field-name">AREA:</td>
                <td>
                    <asp:DropDownList ID="cboAREA" runat="server" DataTextField="AREA_NAME" 
                        DataValueField="AREA1" SelectedValue='<%# Bind("AREA") %>' DataSourceID="ldsAreas" />
                </td>
            </tr>
            <tr>
                <td class="field-name">LOOP:</td>
                <td><asp:TextBox ID="txtLOOP" runat="server" Text='<%# Bind("LOOP") %>' /></td>
            </tr>
            <tr>
                <td class="field-name">LOOP DESCRIPTION:</td>
                <td><asp:TextBox ID="txtLOOP_DESCRIPTION" runat="server" 
            Text='<%# Bind("LOOP_DESCRIPTION") %>' style="width: 600px" /></td>
            </tr>
        </table>

        <asp:Button ID="btnUpdate" runat="server" Text="Update" CommandName="Update" CausesValidation="True" />
        <asp:Button ID="btnCancel" runat="server" Text="Cancel" CommandName="Cancel" CausesValidation="False" />
    </EditItemTemplate>
    <PagerSettings Mode="NextPreviousFirstLast" 
        FirstPageText="&amp;lt;&amp;lt; First" LastPageText="Last &amp;gt;&amp;gt;" 
        NextPageText="Next &amp;gt;" PreviousPageText="&amp;lt; Prev" 
        Position="TopAndBottom" />
    <PagerStyle CssClass="pager" />
</asp:FormView>

<asp:LinqDataSource ID="ldsData" runat="server" 
    ContextTypeName="E_and_I.EAndIDataDataContext" EnableDelete="True" 
    EnableInsert="True" EnableUpdate="True" EntityTypeName="" 
    TableName="INSTRUMENT_LOOP_DESCRIPTIONs" onselecting="ldsData_Selecting" OrderBy="ID ASC" >
</asp:LinqDataSource>

<asp:LinqDataSource ID="ldsAreas" runat="server" 
    ContextTypeName="E_and_I.EAndIDataDataContext" EntityTypeName="" 
    TableName="AREAs" onselecting="ldsAreas_Selecting">
</asp:LinqDataSource>
我将问题追溯到以下几行:

<PagerSettings Mode="NextPreviousFirstLast" 
    FirstPageText="&amp;lt;&amp;lt; First" LastPageText="Last &amp;gt;&amp;gt;" 
    NextPageText="Next &amp;gt;" PreviousPageText="&amp;lt; Prev" 
    Position="TopAndBottom" />


只要我删除上面的
PagerSettings
元素,FormView就会很好地更新记录!有人知道为什么寻呼机的设置会与此有关吗?我使用的是.NET Framework 4.0。

这很可能是由于&<和>的url解码


试着拿出&;;'只需使用&符号即可。您可以使用该方法进行注入。

我复制了您的部分代码,并做了一个实验,我想,我正在实验相同的行为

这就是我所做的:

<asp:LinqDataSource runat="server" ID="lds"
    TableName="jobs" ContextTypeName="WebApplication2.DataAccess.PubsDataContext" >

</asp:LinqDataSource>
<asp:LinqDataSource runat="server" ID="ldse"
    TableName="employee" ContextTypeName="WebApplication2.DataAccess.PubsDataContext" OnSelecting="ldse_Selecting">

</asp:LinqDataSource>

<asp:FormView runat="server" DefaultMode="Edit" ClientIDMode="Predictable" DataKeyNames="emp_id" DataSourceID="ldse"
    AllowPaging="true" OnItemCommand="Unnamed_ItemCommand" ID="formView">
    <EditItemTemplate>
        <div>
            <asp:DropDownList runat="server" ID="ddlJobs" DataSourceID="lds" DataTextField="job_desc" DataValueField="job_id">
            </asp:DropDownList>
        </div>
        <div>
            <asp:TextBox runat="server" TextMode="MultiLine" ID="txtDesc" />
        </div>
        <div>
            <asp:Button Text="Save" runat="server" CommandName="Save" CausesValidation="true" />
            <asp:Button Text="Cancel" runat="server" CommandName="Cancel" CausesValidation="false" />
        </div>
    </EditItemTemplate>
    <PagerSettings Mode="NextPreviousFirstLast" 
        FirstPageText="&amp;lt;&amp;lt; First" LastPageText="Last &amp;gt;&amp;gt;" 
        NextPageText="Next &amp;gt;" PreviousPageText="&amp;lt; Prev" 
        Position="TopAndBottom" />

不幸的是,这没有做到。说实话,我甚至不知道这些他进去了;我当然没有把它们放在那里,我只是尝试了一下设计师,但似乎也没有。复制/粘贴可能吗?不管怎样,当我删除整个
PagerSettings
元素,并将模式更改回
NextPreviousFirstLast
时,设计师确实将它们放在了那里。如果
位置
起作用,它看起来像是一个bug。我投票支持你们获得这笔赏金。我可以接受只设为底部的位置,但这听起来确实像个虫子。我要到明天回去工作的时候才能测试它,但如果它解决了问题,我肯定会把它作为答案并奖励奖金。我感谢你花时间来测试这个!
<asp:LinqDataSource runat="server" ID="lds"
    TableName="jobs" ContextTypeName="WebApplication2.DataAccess.PubsDataContext" >

</asp:LinqDataSource>
<asp:LinqDataSource runat="server" ID="ldse"
    TableName="employee" ContextTypeName="WebApplication2.DataAccess.PubsDataContext" OnSelecting="ldse_Selecting">

</asp:LinqDataSource>

<asp:FormView runat="server" DefaultMode="Edit" ClientIDMode="Predictable" DataKeyNames="emp_id" DataSourceID="ldse"
    AllowPaging="true" OnItemCommand="Unnamed_ItemCommand" ID="formView">
    <EditItemTemplate>
        <div>
            <asp:DropDownList runat="server" ID="ddlJobs" DataSourceID="lds" DataTextField="job_desc" DataValueField="job_id">
            </asp:DropDownList>
        </div>
        <div>
            <asp:TextBox runat="server" TextMode="MultiLine" ID="txtDesc" />
        </div>
        <div>
            <asp:Button Text="Save" runat="server" CommandName="Save" CausesValidation="true" />
            <asp:Button Text="Cancel" runat="server" CommandName="Cancel" CausesValidation="false" />
        </div>
    </EditItemTemplate>
    <PagerSettings Mode="NextPreviousFirstLast" 
        FirstPageText="&amp;lt;&amp;lt; First" LastPageText="Last &amp;gt;&amp;gt;" 
        NextPageText="Next &amp;gt;" PreviousPageText="&amp;lt; Prev" 
        Position="TopAndBottom" />