У меня есть объект ObjectDataSource, который я привязываю к элементу управления DetailsView. У меня есть метод вставки, написанный на бизнес-уровне (который вызывает слой данных), и все работает отлично. Пока я не захочу сделать что-то еще до того, как начнется метод вставки. Прежде чем перейти на мой бизнес-уровень, мне нужен доступ к элементу управления файловой загрузкой. Поэтому я подключил событие ItemCommand в DetailsView - он подбирает событие, и я могу делать то, что мне нужно, с помощью элемента управления FileUpload. В этом случае я вызываю метод insert в бизнес-уровне - тот же метод, указанный в элементе управления ObjectDataSource. Но метод Insert срабатывает дважды! Подумав об этом в течение минуты, я понимаю, что это ожидаемое поведение - оно запускается один раз при вызове из события ItemCommand, а во второй раз из ObjectDataSource InsertMethod.ObjectDataSource Вставить метод
Я думал, что я мог бы просто удалить атрибут InsertMethod из ObjectDataSource, чтобы исключить двойной огнь по этому методу, но когда я делаю, что я получаю эту ошибку:
Inserting is not supported by ObjectDataSource 'objStudentDetails' unless the InsertMethod is specified.
Так есть ли способ, что я могу сказать 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..
}
отлично работает! Не знаю, как я пропустил это - спасибо! – Tone
Ницца проницательность. –