45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:怎么样解决使用GridView与ObjectDataSource绑定抱错对象目标类型的问题?

怎么样解决使用GridView与ObjectDataSource绑定抱错对象目标类型的问题?

2016-09-05 07:55:43 来源:www.45fan.com 【

怎么样解决使用GridView与ObjectDataSource绑定抱错对象目标类型的问题?

ObjectDataSource类可以使用用户自定义的类,并实现数据绑定的操作与自定义类的方法相关联,通过反射调用方法;上周自己作了个小程序,就是完成自定义类实现数据的绑定功能;

程序如下:

default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ObjectDataSourceTest._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>Untitled Page</title>

</head>

<body>

<form id="form1" runat="server">

<div>

<asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource1">

</asp:GridView>

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetCreateTime" TypeName="ObjectDataSourceTest.App_Code.BLL"

OnObjectCreating="GetBLL" OnObjectDisposing="ReturnBLL"></asp:ObjectDataSource>

</div>

</form>

</body>

</html>

default.aspx.cs

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using ObjectDataSourceTest.App_Code;

namespace ObjectDataSourceTest

{

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

}

protected void GetEmployeeLogic(object sender, ObjectDataSourceEventArgs e)

{

BLL cachedLogic = null;

cachedLogic = Cache["BLLObject"] as BLL;

if (null == cachedLogic)

{

cachedLogic = new BLL(DateTime.Now);

}

e.ObjectInstance = cachedLogic;

}

protected void ReturnEmployeeLogic(Object sender, ObjectDataSourceDisposingEventArgs e)

{

BLL cachedLogic = e.ObjectInstance as BLL;

BLL temp = Cache["BLLObject"] as BLL;

if (null == temp)

{

Cache.Insert("BLLObject", cachedLogic);

}

e.Cancel = true;

}

}

}

BLL.cs

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Collections.Generic;

namespace ObjectDataSourceTest.App_Code

{

public classBLL

{

public BLL()

: this(DateTime.Now)

{ }

public BLL(DateTime createDateTime)

{

_createDateTime = createDateTime;

}

private DateTime _createDateTime;

publicList<string> GetCreateTime()

{

List<string> al = new List<string>();

al.Add("创建时间" + _createDateTime);

return al;

}

}

}

但程序调试时总是报"对象与目标类型不匹配"的错误,知道是类型不对,但当时找了半天毛病,就是不知道是那里不对,最后怀疑是ObjectDataSource控件的TypeName属性,

先看看MSDN怎么说:

为创建 ObjectDataSource 控件绑定到的对象的实例,控件在运行时使用反射加载由类型名称标识的类型。因此,TypeName 属性的值可以是位于 Bin 或 App_Code 目录中的代码的部分限定类型,也可以是在全局程序集缓存中注册的代码的完全限定类型名称。如果使用全局程序集缓存,必须将相应的引用添加到 Machine.config 或 Web.config 文件中的 assemblies 节。

ObjectDataSource控件 - 《ASP.NET 2.0技术内幕》描述:

ObjectdataSource控件使用映射来定位和调用处理指定操作的方法。TypeName属性返回定义了要调用的类的程序集的完全限定名。如果该类定义在App_Code目录中,则不需要指示程序集名称。否则,使用一个以逗号分隔的字符串,其形式为[classname, assembly]控件使用映射来定位和调用处理指定操作的方法。

关键就在"如果该类定义在App_Code目录中,则不需要指示程序集名称。否则,使用一个以逗号分隔的字符串,其形式为[classname, assembly]."

不管怎么样,先将TypeName修改为[classname, assembly]形式,程序执行成功;但我的BLL就是放在App_Code文件夹下的,郁闷!!

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetCreateTime" TypeName="ObjectDataSourceTest.App_Code.BLL, ObjectDataSourceTest"

OnObjectCreating="GetBLL" OnObjectDisposing="ReturnBLL"></asp:ObjectDataSource>

怎么样解决使用GridView与ObjectDataSource绑定抱错对象目标类型的问题?怎么样解决使用GridView与ObjectDataSource绑定抱错对象目标类型的问题?

 

本文地址:http://www.45fan.com/a/question/72493.html
Tags: 绑定 Gridview ObjectDataSource
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部