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)
我猜这可能是由于在不同程序集中使用匿名类和 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 代理并将上下文设置为匿名类自身,因此它认为它始终具有访问权限,这与使用动态关键字调用不同。
| 归档时间: |
|
| 查看次数: |
487 次 |
| 最近记录: |