我在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>
答案 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命令,并使用转发器或数据列表来显示?