【问题标题】:C# 4.0 Dynamic Object with ASP.NET DataBinding带有 ASP.NET 数据绑定的 C# 4.0 动态对象
【发布时间】:2012-02-26 04:04:20
【问题描述】:

我试图在 ASP.NET GridView 中显示已使用动态对象动态创建的绑定对象的属性。在我的示例中,DynamicProperties.FullName 是动态的。

我的客户代码是:

<asp:ObjectDataSource runat="server" ID="CustomerDataSource" DataObjectTypeName="Customer" TypeName="CustomerCollection" SelectMethod="LoadAll" />

<asp:GridView ID="CustomerGridView" runat="server" AutoGenerateColumns="False" DataSourceID="CustomerDataSource" EnableViewState="False">
    <Columns>
        <asp:BoundField DataField="FirstName" />
        <asp:BoundField DataField="LastName" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label runat="server" Text='<%#Eval("DynamicProperties.FullName")%>' />
            </ItemTemplate>                
        </asp:TemplateField>
    </Columns>
</asp:GridView>

我的 BLL 代码是(为了清楚起见,我对其进行了简化,并且没有包含我在 ASP.NET 绑定中使用的 CustomerCollection 声明):

public partial class Customer
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }

        private dynamic _dynamicProperties;
        public dynamic DynamicProperties
        {
            get
            {
                if (_dynamicProperties == null)
                {
                    _dynamicProperties = new ExpandoObject();

                    _dynamicProperties.FullName = FirstName + " " + LastName;
                }
                return _dynamicProperties;
            }
        }       
    }

当我运行应用程序时,我收到以下 HttpException 错误: DataBinding:“System.Dynamic.ExpandoObject”不包含名为“FullName”的属性。

我确定我做错了什么,但找不到。当我在我的客户对象中添加一个名为 FullName 的属性并让 getter 返回 DynamicProperties.FullName 时,它​​就像一个魅力(我的 ASP.NET Eval 在这种情况下指的是 FullName 而不是 DynamicProperties.FullName) .

一个想法? 谢谢, 奥米德。

【问题讨论】:

  • 会不会是 _dynamicProperties 不为空?那么当调用getter时,FullName不会被添加进去?
  • 你能展示你的 LoadAll 方法吗?
  • @Jeremy:LoadAll 方法是由工具(CodeFluent Entities)生成的,所以它应该可以工作。当我放置跟踪(甚至是 VS 调试)时,会触发该方法并正确加载数据。如果我删除引用我的动态对象的 ItemTemplate,则数据在 GridView 中显示没有任何问题。
  • @Mike:当我通过VS进行逐步调试时,我通过调用DynamicProperties属性并添加Title动态属性没有任何问题。当我按 F10 继续处理并且步骤到达 #Eval("DynamicProperties.FullName") 时,它会引发所描述的异常。这就像 DataBinding 正在破坏动态行为。
  • 您是否得到了解决方案或解决方法?

标签: asp.net data-binding dynamicobject


【解决方案1】:

Evalobject 作为类型,而您提供dynamic。因此,演员表将有助于使用 Eval 背后的独特属性:

<%# (Container.DataItem as dynamic).FullName%>

简而言之:提供动态对象的地方需要像任何其他类型一样对待,因为它不同于对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多