C# 这是FormView错误吗?
我有一个绑定到ASP.NET页面上LinqDataSource的FormView(已启用分页)。我正在经历一些非常奇怪的行为,不知道为什么会发生。为了简单起见,在这个问题上,我删除了一些不需要的代码(其他FormView模板等)来演示此行为 我的FormView有3个字段,两个文本框和一个下拉列表。DropDownList绑定到页面上的另一个LinqDataSource并包含外键值。当FormView的LinqDataSource仅包含一条记录,并且我尝试更新它时,更新失败,因为DropDownList的选定值始终为空,无论我为它选择哪个值。当FormView的LinqDataSource包含2条或更多记录时,它会正常工作 现在有件很奇怪的事。由于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
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="&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>
我将问题追溯到以下几行:
<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。这很可能是由于&<和>的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="&lt;&lt; First" LastPageText="Last &gt;&gt;"
NextPageText="Next &gt;" PreviousPageText="&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="&lt;&lt; First" LastPageText="Last &gt;&gt;"
NextPageText="Next &gt;" PreviousPageText="&lt; Prev"
Position="TopAndBottom" />