原创第一弹:ObjectDataSource相关属性及事件的理解

最近你在使用NBear框架做项目的时候为了方便还是用了ObjectDataSource(以下简称ODS),虽然使用ODS破坏了Ioc模式使View对Presenter中的对象产生了依赖,但暂时没有找到合适的办法解决这个问题。于是顺便对ODS进行了一些研究。

 

属性:

 

        TypeName:ODS定要用作源对象的类名称(一般用业务类)。

        eg:

  1. ods.TypeName = typeof(BizProcess.User).FullName;

        对于源对象有这样的说明:"如果它是静态方法,则不需要完成任何特殊的工作。如果该方法是实例方法,则 ObjectDataSource 必须能够创建该类的实例。要达到该目的,最简单的方法是将该业务类编写为包含默认的构造函数。"

 

        DataObjectTypeName:ODS在响应Select、Update等方法时传递给源对象(一般是业务对象)的实体类实例。

        eg:

  1. ods.DataObjectTypeName = typeof(Entity.User).FullName;

        SelectMethod,InsertMethod,UpdateMethod,DeleteMethod,SelectCountMethod等:ODS用来对应源对象中相应方法的名称。

        eg

  1. ods.SelectMethod = "SelectUser";ods..UpdateMethod = "UpdateUser";(...)

        对于SelectMethod必须返回一个可枚举的列表,例如,集合、数组、DataSet 或 DataReader。

 

        SelectParameters,UpdateParameters等:ODS在调用源对象方法时所指定的参数。根据传递参数的不同,源对象会找到不同的重载方法来执行。

        eg

  1. ods.SelectParameters.Add("cacuParameterID", TypeCode.Object, "");

        或者在ods标签内添加:

  1. <SelectParameters>
  2.     <asp:Parameter Name="cacuParameterID" Type="Object" />
  3. </SelectParameters>

 

事件:

 

        ObjectCreating:"在创建由 TypeName 属性标识的对象之前发生。"实例化源对象时触发。它使你可以用所需的任何构造函数来代替默认的源对象的构造函数去实例化该源对象,然后将该源象实例传递给数据源控件。

        eg

        MSDN:"在创建由 TypeName 属性标识的对象之前发生。"

 

        ObjectCreated

        eg:

        MSDN:处理ObjectCreated事件,在ObjectDataSource对象调用业务对象数据方法以执行数据操作前,调用业务对象的其他方法,设置属性或执行其他特定于业务对象的初始化。通过ObjectInstance属性访问对象的引用,该属性由ObjectDataSourceEventArgs 对象公开。

 

        如果被标识以执行数据操作的方法为 static(Visual Basic 中为 Shared),则永远不会引发 ObjectCreating 和 ObjectCreated 事件。(larsson:估计是指源对象如果是静态方法则不会触发这两个事件,和之前所说的“对于源对象如果它是静态方法,则不需要完成任何特殊的工作。如果该方法是实例方法,则 ObjectDataSource 必须能够创建该类的实例。”吻合。)

 

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当然可以。以下是一个简单的ASP.NET Web Forms代码示例,用于向数据库中插入新的用户信息: 1. 在Default.aspx页面上定义一个ObjectDataSource控件: ```html <asp:ObjectDataSource ID="userDataSource" runat="server" TypeName="UserManager" InsertMethod="InsertUser" /> ``` 2. 在Default.aspx页面上定义一个FormView控件,并设置它的DataSourceID属性ObjectDataSource的ID: ```html <asp:FormView ID="userFormView" runat="server" DataSourceID="userDataSource"> <InsertItemTemplate> <div> <label>用户名:</label> <asp:TextBox ID="userNameTextBox" runat="server" Text='<%# Bind("UserName") %>' /> </div> <div> <label>密码:</label> <asp:TextBox ID="passwordTextBox" runat="server" Text='<%# Bind("Password") %>' /> </div> <div> <label>邮箱:</label> <asp:TextBox ID="emailTextBox" runat="server" Text='<%# Bind("Email") %>' /> </div> <div> <asp:Button ID="insertButton" runat="server" Text="添加" CommandName="Insert" /> </div> </InsertItemTemplate> </asp:FormView> ``` 3. 在Default.aspx.cs页面上定义一个UserManager类,并在该类中定义一个InsertUser方法,用于向数据库中插入新的用户信息: ```csharp public class UserManager { public void InsertUser(string userName, string password, string email) { // 向数据库中插入新的用户信息 string connectionString = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString; using (SqlConnection connection = new SqlConnection(connectionString)) { string sql = "INSERT INTO Users (UserName, Password, Email) VALUES (@UserName, @Password, @Email)"; using (SqlCommand command = new SqlCommand(sql, connection)) { command.Parameters.AddWithValue("@UserName", userName); command.Parameters.AddWithValue("@Password", password); command.Parameters.AddWithValue("@Email", email); connection.Open(); command.ExecuteNonQuery(); connection.Close(); } } } } ``` 4. 在Default.aspx.cs页面上实现FormView控件的Inserting事件,并在事件处理程序中调用UserManager类中的InsertUser方法: ```csharp protected void userFormView_Inserting(object sender, FormViewInsertEventArgs e) { string userName = e.Values["UserName"].ToString(); string password = e.Values["Password"].ToString(); string email = e.Values["Email"].ToString(); UserManager userManager = new UserManager(); userManager.InsertUser(userName, password, email); } ``` 以上是一个简单的ObjectDataSource的Insert功能示例代码。当用户点击“添加”按钮时,会触发FormView控件的Inserting事件,然后调用UserManager类中的InsertUser方法,向数据库中插入新的用户信息。需要注意的是,需要根据实际情况修改每个步骤的具体实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值