我有一个绑定到 ASP.NET 页面上的 LinqDataSource 的 FormView(启用了分页)。我遇到了一些非常奇怪的行为,无法弄清楚为什么会这样。为简单起见,我删除了一些不需要的代码(其他 FormView 模板等)来演示此行为。
我的 FormView 有 3 个字段、两个文本框和一个 DropDownList。DropDownList 绑定到页面上的另一个 LinqDataSource 并包含外键值。当 FormView 的 LinqDataSource 仅包含一条记录并且我尝试更新它时,更新失败,因为 DropDownList 的选定值始终为空,无论我为它选择哪个值。当 FormView 的 LinqDataSource 包含 2 个或更多记录时,它会正常工作。
现在这是真正奇怪的事情。由于 FormView 的 PagerSettings,更新实际上失败了!当我只使用默认的寻呼机设置时,一切都很好。当我将 PagerMode 更改为 时NextPreviousFirstLast
,更新失败。
这是我的 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="&lt;&lt; First" LastPageText="Last &gt;&gt;"
NextPageText="Next &gt;" PreviousPageText="&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>
这是我的 LinqDataSource 的两个Selecting
事件:
EAndIDataDataContext db = new EAndIDataDataContext();
protected void ldsData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
e.Result = db.INSTRUMENT_LOOP_DESCRIPTIONs.Take(1); // we only want one record for testing
}
protected void ldsAreas_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
e.Result = db.AREAs.OrderBy(a => a.AREA1).Select(a => new { AREA1 = a.AREA1, AREA_NAME = "(" + a.AREA1 + ") " + a.AREA_NAME });
}
我已经将问题追溯到以下几行:
<PagerSettings Mode="NextPreviousFirstLast"
FirstPageText="&lt;&lt; First" LastPageText="Last &gt;&gt;"
NextPageText="Next &gt;" PreviousPageText="&lt; Prev"
Position="TopAndBottom" />
一旦我删除了上述PagerSettings
元素,FormView 就会很好地更新记录!有谁知道为什么寻呼机设置与此有关?我正在使用 .NET Framework 4.0。