我有一系列松散地符合以下模式的类:
public class CustomerInfo {
public int Id {get; set;}
public string Name {get; set;}
}
public class CustomerTable {
public bool Insert(CustomerInfo info) { /*...*/ }
public bool Update(CustomerInfo info) { /*...*/ }
public CustomerInfo Get(int id) { /*...*/ }
/*...*/
}
成功插入后,Insert 方法将设置传入的 CustomerInfo 对象的 Id 属性。我在多个地方使用了这些类,并希望更改它们。现在我正在尝试编写一个用于插入和更新记录的 ASP.NET 页面。我目前正在使用 ObjectDataSource 和 FormView 控件:
<asp:ObjectDataSource
TypeName="CustomerTable"
DataObjectTypeName="CustomerInfo"
InsertMethod="Insert"
UpdateMethod="Update"
SelectMethod="Get"
/>
我可以成功插入和更新记录。我想在插入成功后将 FormView 的模式从插入切换到编辑。我的第一次尝试是在 ItemInserted 事件中切换模式。
这当然行不通。我使用 QueryStringParameter 作为 id 插入时当然不会设置。
因此,我切换到在 ObjectDataSource 的 Selecting 事件期间手动填充 InputParameters。问题是我需要知道新插入的记录的 id,我找不到一个好的方法来获取。
我知道我可以访问 Insert 方法的返回值,以及 ItemInserted 事件中的 out 参数,当然我的方法不会使用这些方法中的任何一个返回 id。我无论如何都无法访问插入完成后插入的 id 或 CustomerInfo 对象。
我能做的最好的事情是将 CustomerInfo 对象保存在 ObjectDataSource 的 Inserting 事件中。
这感觉像是一种奇怪的方式来做到这一点。我认为必须有更好的方法来做到这一点,当我看到它时我会踢自己。有任何想法吗?