質問

私は、DetailsViewコントロールにバインドてるのObjectDataSourceを持っています。私はinsertメソッドが起動する前に他の何かをしたくなるまで..私は、ビジネス層で書かれたinsertメソッドを持っている(データ層へのダウンコールした)とすべてが正常に動作します。私のビジネス層に行く前に、私は、ファイルアップロードコントロールにアクセスする必要があります。だから私はたDetailsViewのItemCommandイベントを有線 - それがイベントをピックアップし、私は私がするFileUploadコントロールをうまく必要なものを行うことができます。 ObjectDataSourceコントロールで指定したのと同じ方法 - そのイベントでは、私は、ビジネス層でのinsertメソッドを呼び出します。しかし、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..
}
役に立ちましたか?

解決

あなただけのObjectDataSourceの挿入イベントを処理することができない理由はありますか?それも、あなたがしたい場合は、挿入をキャンセルする方法があります。

ただ、マークアップ内のObjectDataSourceにイベントハンドラを追加します(またはデザイナを使用):

<asp:ObjectDataSource id=CustomerObjectDataSource" runat="server" 
    oninserting="CustomerObjectDataSource_Inserting"
</asp:ObjectDataSource>

このイベントが発生し、単に挿入する前に、あなたが伝播するからそれを停止する必要がある場合、あなたはこのような何かを行うことができます:

protected void CustomerObjectDataSource_Inserting(object sender, ObjectDataSourceMethodEventArgs e)
{
    InsertMethod(someParams);

    //If you are satisfied with what has already been done..
    e.Cancel = true;    
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top