我感到惭愧,我做错了什么,我不知道它是什么。 有人在这帮忙吗?如果是这样,请提前感谢!
我正在尝试从ASP Usercontrol中读取GAC中的Inherited Code中的属性。 UserControl中的CodeBehind是:
namespace My.Name.Space
{
public class MyControl : UserControl
{
public String SomeString { get; set; }
public Boolean MyProperty
{
get
{
if (String.Equals(SomeString,"SomeValue"))
return true;
return false;
}
}
// other code
}
}
ascx看起来像这样:
<%@ Control ClassName="MyControl" Language="C#" Inherits="My.Name.Space.MyControl, MyDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxx" %>
<asp:DropDownList runat="server" id="myId" Visible='<%# Eval("MyProperty") %>' />
Control被硬连接到Aspx页面,但是在aspx中设置了SomeString属性! SomeString属性在Aspx页面的OnLoad中设置。
任何想法我的代码有什么问题? 再次感谢!
编辑:我也尝试了<asp:Label Text='<% Eval("MyProperty") %>' />
,同样的错误(发生了意外错误。)
答案 0 :(得分:1)
使用&lt;%#%&gt;标准标记中的语法(在绑定控件之外) - 您必须在用户控件或页面本身上调用DataBind()。
答案 1 :(得分:1)
Eval代码块与数据绑定控件一起使用,但在调用this.DataBind()时也会进行评估。
然而,您不需要使用Eval(实际上您不能使用用户控件),因为此构造由ASP .Net转换为类似DataBinder.Eval(someObject, "SomePropertyOfAnObject")
的内容,它接受someObject并通过反射获取值of SomePropertyOfAnObject 属性。 DataBinding控件具有DataSource属性,该属性是要评估的对象的集合。用户控件并非如此。
您仍然可以使用<%# %>
,但请按以下方式使用:
<asp:DropDownList runat="server" id="myId" Visible='<%# MyProperty %>' />
ASP .Net将生成如下内容:
dataBindingExpressionBuilderTarget.Visible = ((bool)( MyProperty ));
如果您将来改变主意,那么MyProperty至少应受到保护。