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

时间:2011-01-13 21:02:43

标签: 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>();
                }
            }

        }
    }

ASPX代码:

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

2 个答案:

答案 0 :(得分:1)

我猜这可能是一个权限问题,因为使用匿名类和aspx后期编译不同程序集中的东西。

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

using ImpromptuInterface

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

interface ISelectJob
 dynamic JobID
 dynamic JobTitle
 dynamic CompanyName
 dynamic InterestDate
 dynamic InterestLevel
}

您的媒体资源应使用界面

public List<ISelectJob> JobList { get; set; }

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

即可
JobList = qry.AllActLike<ISelectJob>().ToList();

这应该可行,因为它生成一个轻量级的dlr代理并将其设置为匿名类,因此它认为它始终具有访问权限,而不像使用dynamic关键字调用。

答案 1 :(得分:1)

如何使用LinqDataSource,设置OnSelecting命令,并使用转发器或数据列表来显示?