Ich habe eine ObjectDataSource, die ich an ein DetailsView-Steuerelement binde. Ich habe die Insert-Methode in einer Business-Schicht geschrieben (die in eine Datenebene aufruft) und alles funktioniert gut .. bis ich etwas anderes vor der Einfügemethode tun möchte. Bevor ich zu meiner Business-Schicht gehe, brauche ich Zugriff auf ein Dateiupload-Steuerelement. Also habe ich ein ItemCommand-Ereignis im DetailsView verdrahtet - es nimmt das Ereignis auf und ich kann mit dem FileUpload-Steuerelement genau das tun, was ich brauche. In diesem Fall rufe ich die Einfügemethode in der Business-Schicht auf - dieselbe Methode, die im ObjectDataSource-Steuerelement angegeben ist. Aber die Insert-Methode wird zweimal ausgelöst! Nachdem ich eine Weile darüber nachgedacht habe, merke ich, dass dies das erwartete Verhalten ist - es wird einmal ausgelöst, wenn es vom ItemCommand-Ereignis aufgerufen wird, und das zweite Mal von ObjectDataSource InsertMethod.ObjectDataSource Insert-Methode
Ich dachte, ich einfach das Insert Attribut aus dem Object entfernen könnte das doppelte Feuer an diesem Verfahren zu beseitigen, aber wenn ich tue, dass ich diesen Fehler:
Inserting is not supported by ObjectDataSource 'objStudentDetails' unless the InsertMethod is specified.
So ist es eine Möglichkeit, ich kann sagen, die ObjectDataSource nicht die Methode auslösen? Siehe Code vereinfacht Code unten:
<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..
}
funktioniert super! Nicht sicher, wie ich das verpasst habe - danke! – Tone
Schönes bisschen Einblick. –