我有一个绑定到 DetailsView 控件的 ObjectDataSource。我在业务层(调用数据层)中编写了插入方法,一切正常......直到我想在插入方法触发之前做其他事情。在进入我的业务层之前,我需要访问文件上传控件。因此,我在 DetailsView 上连接了一个 ItemCommand 事件 - 它接收该事件,我可以使用 FileUpload 控件执行我需要的操作。在那种情况下,我调用业务层中的插入方法 - 与 ObjectDataSource 控件中指定的方法相同。但是 Insert 方法会触发两次!在考虑了一分钟后,我意识到这是预期的行为——它在从 ItemCommand 事件调用时触发一次,第二次从 ObjectDataSource InsertMethod 触发。
我想我可以简单地从 ObjectDataSource 中删除 InsertMethod 属性来消除该方法的双重触发,但是当我这样做时,我得到了这个错误:
ObjectDataSource 'objStudentDetails' 不支持插入,除非指定了 InsertMethod。
那么有什么方法可以告诉 ObjectDataSource 不要触发该方法吗?请参阅下面的代码简化代码:
<asp:DetailsView ID="dtvStudentDetails"
runat="server"
AutoGenerateRows="False"
DataSourceID="objStudentDetails"
OnItemCommand="dtvStudentDetails_ItemCommand">
:
:
</asp:DetailsView>
<asp:ObjectDataSource ID="objStudentDetails"
runat="server"
TypeName="AIMLibrary.BLL.Students"
SelectMethod="GetStudentDetails"
UpdateMethod="UpdateStudent">
:
:
</asp:ObjectDataSource>
public static Int32 InsertStudent(Int32 studentId, String firstName, String lastName, String employer, String phone, String email, String address, String city, String state, String zip, String dob, String cardImagePath)
{
StudentDetails record = new StudentDetails(firstName, lastName, employer, phone, email, address, city, state, zip, dob, cardImagePath);
StudentsProvider provider = new StudentsProvider();
return provider.InsertStudent(record); //actual insert happens in here..
}