带继承的Usercontrol中的Eval

时间:2012-06-06 09:32:34

标签: c# asp.net user-controls eval

我感到惭愧,我做错了什么,我不知道它是什么。 有人在这帮忙吗?如果是这样,请提前感谢!

我正在尝试从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") %>' />,同样的错误(发生了意外错误。)

2 个答案:

答案 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至少应受到保护。