我在 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/