各们DX,小弟有个问题请教。
大家都知道在ASP.NET中有个ParseControl方法可以HTML将字符串类型转换成web控件,HTML代码是:<asp:Label ID="Label1" runat="server">数据列表</asp:Label><asp:objectDataSource ID="objectDataSource1" runat="server"></asp:objectDataSource><asp:Repeater ID="Repeater1" runat="server" DataSourceID="objectDataSource1"><ItemTemplate><div><%#Eval("FName")%></div></ItemTemplate></asp:Repeater>
但是我要在转换后绑定数据进去时,出现异常如:Cannot instantiate type 'DataBoundLiteralControl' because there is no public
parameterless constructor.
为什么在绑定<%#Eval("FName")%>时出错呢?
ObjectDataSource的select方法里面有“FName”字段么 ?
我引用你的代码,自行完整了ObjectDataSource,运行正常。我想,是不是你的环境存在问题,造成 asp:Repeater 控件无法正常使用。楼上的,不是字段的原因,属性错误,抛出的意外消息不是这样的
Test
<asp:ObjectDataSource ID="objectDataSource1" runat="server" SelectMethod="Test" TypeName="UsersManager">asp:ObjectDataSource>
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="objectDataSource1">
<ItemTemplate>
<div><%#Eval("FName")%>
div>
ItemTemplate>
asp:Repeater>
public class UsersManager {
private UsersManager() {
}
public static DataTable Test() {
DataTable dt = new DataTable();
dt.Columns.Add("FName");
for (int i = 0; i < 10; i++) {
dt.Rows.Add(i.ToString());
}
return dt;
}
}
补充一下:没用过 ParseControl(甚至不知道这是方法还是工具),或许你的问题出在你使用的工具(或方法)上,而非目标显示控件本身的问题。是不是你的工具打乱了控件自身的生存周期?
以下摘自 http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=104611
Generally, the ParseControl API never causes compilation, and hence doesn't have the ability to handle any code, and completely ignores code blocks (<% ... %> and <%= ... %>). It is supposed to also ignore <%# ... %> blocks, but instead fails due to bad error handling. But in any case, it wouldn't do what you want.
通过上面以及原文的叙述,或许你的这个问题还不好解决呢,大概要改变你的实现逻辑了。通常我用到动态控件时都是通过 compsitecontrol 绑定某个 xmlstring ,而在 createchildren() 时进行显示创建,而没用过 parsecontrol 这类。
可查阅的资料或可借鉴的案例太少,估计这才是你最大的困难所在吧。
一、如你还要再对FName的值做转换的话,你可以在Repeater的ItemDataBound事件中对FName字段进行转换。二、以上异常信息应该是你的objectdatasource设定存在问题点型配置如下
1.首先我们要在app_code下添加一个提供数据源的class我们假定它为employee
2.设定ObjectDataSource 如下
Code
具体可以参看MSDN的ObjectDataSource详细使用.熟悉了ObjectDataSource的使用这个问题,就迎韧而解了。