我正在使用ObjectDataSource来执行CRUD操作。出于某种原因,我得到一个“ObjectDataSource'ObjectDataSource1'没有要插入的值。检查'values'字典是否包含值。”
有什么建议吗?
我知道这个控件继承自ObjectDataSource控件。根据文档http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.insertmethod.aspx
如果设置了DataObjectTypeName属性,则以不同的方式解析该方法。 ObjectDataSource查找具有在InsertMethod属性中指定的名称的方法,该属性采用DataObjectTypeName属性中指定的类型的一个参数。
这就是我的ObjectDataSource控件的设置方式。
<asp: ObjectDataSource ID="ObjectDataSource1" runat="server"
DataObjectTypeName="MyApplication.Entities.Domain.MyObject" ConflictDetection="CompareAllValues"
OldValuesParameterFormatString="original{0}" SelectMethod="GetUserDisplays"
InsertMethod="CreateMyObject" UpdateMethod="UpdateMyObject" DeleteMethod="DeleteDisplay">
</asp:ObjectDataSource>
我在InsertMethod上设置了一个断点,但是当我尝试保存表单时,应用程序甚至没有点击它。我怀疑DataObjectType由于某种原因没有被正确实例化。
我正在尝试在ASPxGridview控件的EditForm中执行Insert操作,而DataObjectType是一个EF POCO,其中包含一些附加属性(标记为虚拟)以从ObjectContext加载相关实体。我认为这可能是问题,但不知道如何解决它(到处寻找!!!)。
非常感谢任何帮助!
答案 0 :(得分:5)
虽然我无法确定为什么DataObjectType没有自动实例化,但我意识到在调用ObjectDataSource上的InsertMethod之前需要添加一个输入参数。为此,我需要在Inserting事件中添加输入参数(在我的场景中)。感谢StackOverflow上的另一篇文章,我能够弄清楚我需要从ObjectDataSource中删除'DataObjectTypeName'属性才能触发Inserting事件。
答案 1 :(得分:1)
我没有注意到ObjectDataSource定义中的“TypeName”属性。 DataObjectTypeName according to MSDN用于标识“ObjectDataSource控件在更新,插入或删除数据操作中用于参数的类”,而不是从数据绑定控件传递单个值。如果类是相同的(即CRUD方法类和数据对象定义类),则应将这两个属性分配给同一个类。但是,如果您的方法包含在与DTO不同的类中,那么您将单独识别每个类。
答案 2 :(得分:0)