开发者

Can't Reference Dynamic Objects in Embedded ASPX code

开发者 https://www.devze.com 2023-02-04 10:23 出处:网络
I\'m creating a List member variable during my Page_Init event.I\'m having a problem referencing the objects in the list from my embedded C# code in the *.aspx page.The error is a Runtime Binder Excep

I'm creating a List member variable during my Page_Init event. I'm having a problem referencing the objects in the list from my embedded C# code in the *.aspx page. The error is a Runtime Binder Exception that says "'object' does not contain a definition for 'JobID'".

When the debugger is invoked, I can see that the foreach loop's variable j does indeed have a dynamic property named JobID and it's filled with an int value. So, my question is why my embedded C# code can't work with the dynamic object. Is there an <%@ Import %> statement that I need to work with dynamic objects? I tried adding <%@ Import namespace="System.Dynamic" %> but that didn't help.

Thanks for the help. Mark

Code Behind:

 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 Code:

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


My guess this might be a permission issue due to using an anonymous class and aspx late compiling stuff in different assemblies.

You can use impromptu-interface to make this work.

using ImpromptuInterface

then you make an Interface (I'm using dynamic because i don't know your types)

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

Your Property should use the interface

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

And to create your list just add .AllActLike<ISelectJob>()

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

And this should work, as it generates a lightweight dlr proxy and sets the context to the anonymous class its self so it thinks it always has access, unlike calling with the dynamic keyword.


What about using a LinqDataSource, setting the OnSelecting command, and using a repeater or datalist to display?

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号