私は、DetailsViewコントロールにバインドするObjectDataSourceを持っています。私はインサートメソッドをビジネスレイヤー(データレイヤーを呼び出す)で作成し、すべて正常に動作します。インサートメソッドが起動する前に何か他の処理を行うまでは、ビジネスレイヤーに行く前に、ファイルアップロードコントロールにアクセスする必要があります。だから、私はDetailsViewのItemCommandイベントを配線しました - それはイベントをピックアップし、私はFileUploadコントロールで必要なものをうまく処理できます。このイベントでは、ビジネスレイヤーのinsertメソッドを呼び出します。これは、ObjectDataSourceコントロールで指定されているのと同じメソッドです。しかし、Insertメソッドは2回発生します!これについて考えた後、これは期待される動作です - ItemCommandイベントから呼び出されると1回、ObjectDataSource InsertMethodから2回目に呼び出されます。ObjectDataSource挿入メソッド
私は単にそのメソッドをダブル火を排除するためにObjectDataSourceからInsertMethod属性を削除することもできますが、私はこのエラーを取得することを行うときに考えた:
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
洞察の素敵なビット。 –