问题:ObjectDataSource在通过FormView调用更新方法时通过(基本上)空的数据对象发送数据。值的唯一字段是在FormView的DataKeyNames属性中列出的字段。当使用FormView来更新ObjectDataSource时使用空参数Telerik RadPanelBar
注:我在FormView中使用Telerik RadPanelBars。
当我在FormView的ItemUpdating事件打破,我看到:
- 的密钥列表有两个项目,就像DataKeyNames属性。看起来不错。
- OldValues和NewValues词典为空。他们没有任何东西。不是带有空值的字段名 - 它们实际上是零项空列表。
当我们到达ObjectDataSource的更新事件时,我们看到一个ProjectTask对象只有两个值(匹配DataKeyNames字段) - 其他所有字段都为空。
这里是更新方法我用:
public static void UpdateProjectTask(ProjectTask projectTask)
{
var dc = new PrbDataContext();
dc.ProjectTasks.Attach(projectTask, true);
dc.SubmitChanges();
}
这里是为ObjectDataSource和FormView标记:
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DataObjectTypeName="ProjectBilling.Business.Data.ProjectTask"
SelectMethod="GetProjectTask" TypeName="ProjectBilling.Business.Data.ProjectTask" UpdateMethod="UpdateProjectTask" OldValuesParameterFormatString="original_{0}" OnUpdating="ObjectDataSource1_Updating">
<SelectParameters>
<asp:Parameter DefaultValue="0" Name="projectTaskId" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
<asp:FormView ID="FormView1" runat="server" DataSourceID="ObjectDataSource1" DefaultMode="Edit"
DataKeyNames="Id,Timestamp" OnItemUpdated="FormView1_ItemUpdated" Width="600px">
重要:我使用Telerik控制,他们需要一个奇怪的约束。
DataBinder.Eval(FormView1.DataItem, "TaskTemplateId")
我也尝试过这种方法,它没有取得任何效果会更好:
((ProjectBilling.Business.Data.ProjectTask)(Container.DataItem ?? new ProjectBilling.Business.Data.ProjectTask())).BillNarrative
控制是检索数据就好了;我无法更新它。
一如既往地感谢您的帮助,先生们。
这家伙似乎有类似的问题:Can’t get FormView values from ObjectDataSource on update