asp.net - 无法在嵌入式 ASPX 代码中引用动态对象

标签 asp.net dynamic .net-4.0

我在 Page_Init 事件期间创建了一个 List 成员变量。我在从 *.aspx 页面中嵌入的 C# 代码中引用列表中的对象时遇到问题。该错误是运行时绑定(bind)器异常,显示“'object'不包含'JobID'的定义”。

调用调试器时,我可以看到 foreach 循环的变量 j 确实有一个名为 JobID 的动态属性,并且填充了一个 int 值。所以,我的问题是为什么我的嵌入式 C# 代码不能与动态对象一起使用。是否有我需要使用动态对象的 <%@ Import %> 语句?我尝试添加 <%@ Import namespace="System.Dynamic"%> 但这没有帮助。

谢谢您的帮助。
标记

隐藏代码:

 using System;
    using System.Collections.Generic;
    using System.Linq;
    using Jobbarama.WebCode;
    using DataModel;


    public partial class contact : System.Web.UI.Page
    {
        public List<dynamic> JobList { get; set; }

        protected void Page_Init(object sender, EventArgs e)
        {
            SessionManager mgr = SessionManager.Current;

                using (myEntities context = new myEntities())
                {
                    var qry = from c in context.vjobList
                        where c.CampaignID == mgr.CampaignID
                        select new
                        {
                            c.JobID, c.JobTitle, c.CompanyName, c.InterestDate, c.InterestLevel
                        };

                    JobList = qry.ToList<dynamic>();
                }
            }

        }
    }

ASPX 代码:
<select id='cboJob' name='cboJob' style='width: 150px;'>
   <%foreach (var j in JobList){ %>
      <option value="<%=j.JobID %>"><%=j.JobTitle%> [<%=j.CompanyName%>]</option>
   <%} %>
</select>

最佳答案

我猜这可能是由于在不同程序集中使用匿名类和 aspx 后期编译东西而导致的权限问题。

您可以使用impromptu-interface使这项工作。

using ImpromptuInterface

然后你制作一个接口(interface)(我使用的是动态的,因为我不知道你的类型)
interface ISelectJob
 dynamic JobID
 dynamic JobTitle
 dynamic CompanyName
 dynamic InterestDate
 dynamic InterestLevel
}

您的属性应该使用接口(interface)
public List<ISelectJob> JobList { get; set; }

要创建您的列表,只需添加 .AllActLike<ISelectJob>()
JobList = qry.AllActLike<ISelectJob>().ToList();

这应该可以工作,因为它生成了一个轻量级 dlr 代理并将上下文设置为它自己的匿名类,因此它认为它始终可以访问,这与使用 dynamic 关键字调用不同。

关于asp.net - 无法在嵌入式 ASPX 代码中引用动态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4685218/

相关文章:

linq - 如何调用动态指定不同表名的 Linq-to-Entities (EF4) 查询?

c# - 如何编码 C# 结构数组?

.net - 诊断 MissingMethodException

html - 使用 CSS 为 I.E 设计样式?

c# - WSDL 应该如何构建?

C# 4.0 : Dynamic, 继承自 DynamicObject

c# - 在另一个线程中抛出异常时不调用 UnhandledException

asp.net - Visual Studio 2008 - 无法命中断点

c# - 将 XML 数据写入 ASP.NET 页面

mysql - MySQL 中的动态列?