【发布时间】:2009-08-20 11:19:20
【问题描述】:
我正在使用 FormView 控件来编辑使用 LinqDataSource 获取的记录。本质上,FormView 和数据源的标记如下所示:
<asp:FormView ID="RuleInstancePropertiesFormView" runat="server" DataKeyNames="RuleInstanceId"
DataSourceID="RuleInstanceDataSource" DefaultMode="Edit" Visible="false"
CssClass="PropertiesTable">
<EditItemTemplate>
<asp:Label ID="RuleInstanceId" runat="server" Text='<%# Eval("RuleInstanceId") %>' />
<telerik:RadTextBox ID="RuleInstanceNameTextBox"
runat="server"
Text='<%# Bind("Rule.Name") %>' />
<telerik:RadTextBox ID="LimitIndexTextBox"
runat="server"
Text='<%# Bind("LimitIndex") %>' />
</EditItemTemplate>
</asp:FormView>
<asp:LinqDataSource ID="RuleInstanceDataSource" runat="server"
ContextTypeName="Questionnaire.QuestionnairesDataContext"
TableName="RuleInstances" EnableUpdate="true">
</asp:LinqDataSource>
我正在编辑的记录有一个对另一个表的外键引用,即“规则”表。在 FormView 中,我需要编辑这个外键表中的字段(我在上面的代码中绑定了 Rule.Name 字段)。
当我尝试保存更改时,本地字段 (LimitIndex) 已正确保存在数据库中,但外部字段 (Rule.Name) 未正确保存。我对此有点困惑,因为 FormView 正确地获取 Rule.Name 的当前值,但拒绝将其持久化回 LINQ 对象。
希望有人能帮忙,谢谢:)
【问题讨论】:
-
另外,如果我可以指定要在我的 LINQ 查询中使用的自定义投影对象,那么我可以指定该投影对象和我的 Rule 对象之间的数据绑定(使用外部表引用)。如果 LinqDataSource 还应该支持自动更新,它似乎不允许使用自定义选择查询:(。
标签: asp.net linq linq-to-sql