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

sis*_*dog 6 asp.net dynamic .net-4.0

我在Page_Init事件期间创建了一个List成员变量.我在*.aspx页面中从嵌入式C#代码引用列表中的对象时遇到问题.错误是运行时绑定程序异常,表示"'对象'不包含'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>();
                }
            }

        }
    }
Run Code Online (Sandbox Code Playgroud)

ASPX代码:

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

jbt*_*ule 1

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

您可以使用即兴界面来完成这项工作。

using ImpromptuInterface
Run Code Online (Sandbox Code Playgroud)

然后你创建一个接口(我使用动态,因为我不知道你的类型)

interface ISelectJob
 dynamic JobID
 dynamic JobTitle
 dynamic CompanyName
 dynamic InterestDate
 dynamic InterestLevel
}
Run Code Online (Sandbox Code Playgroud)

您的财产应该使用该界面

public List<ISelectJob> JobList { get; set; }
Run Code Online (Sandbox Code Playgroud)

要创建您的列表,只需添加.AllActLike<ISelectJob>()

JobList = qry.AllActLike<ISelectJob>().ToList();
Run Code Online (Sandbox Code Playgroud)

这应该可行,因为它生成一个轻量级 dlr 代理并将上下文设置为匿名类自身,因此它认为它始终具有访问权限,这与使用动态关键字调用不同。