2011-01-13 25 views
6

Tôi đang tạo biến thành viên Danh sách trong sự kiện Page_Init của mình. Tôi gặp sự cố khi tham chiếu các đối tượng trong danh sách từ mã C# được nhúng của tôi trong trang * .aspx. Lỗi là một ngoại lệ Runtime Binder cho biết "đối tượng" không chứa định nghĩa cho 'JobID' ".Không thể tham chiếu các đối tượng động trong mã ASPX nhúng

Khi trình gỡ rối được gọi, tôi có thể thấy rằng biến vòng lặp foreach j thực sự có một thuộc tính động có tên là JobID và nó được điền bằng một giá trị int. Vì vậy, câu hỏi của tôi là tại sao mã C# được nhúng của tôi không thể làm việc với đối tượng động. Có một tuyên bố <% @ Nhập%> mà tôi cần phải làm việc với các đối tượng động không? Tôi đã thử thêm <% @ Import namespace = "System.Dynamic"%> nhưng điều đó không giúp ích gì.

Cảm ơn sự giúp đỡ. Đánh dấu

Mã Đằng sau:

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: 150px;'> 
    <%foreach (var j in JobList){ %> 
     <option value="<%=j.JobID %>"><%=j.JobTitle%> [<%=j.CompanyName%>]</option> 
    <%} %> 
</select> 
+0

Tôi đang gặp khó khăn tương tự với mã nhúng nơi mã của tôi trả về một số điện thoại IE2 có thể là . Nó xuất hiện một nơi nào đó năng động của tôi đang được chuyển đổi sang một đối tượng hoặc một cái gì đó. @sisdog, ngay cả khi bạn sửa đổi foreach của bạn để trông giống như <% foreach (dynamic j trong JobList)%> nó dường như không hoạt động. – kd7iwp

+0

Trong khi không phải là câu trả lời cho lý do tại sao nó không hoạt động, bạn có thể viết lại mã của bạn để sử dụng DataBinder.Eval sẽ sử dụng sự phản chiếu để lấy thuộc tính JobID. – Tony

Trả lời

1

tôi đoán điều này có thể là một vấn đề cho phép do sử dụng một lớp vô danh và aspx cuối biên dịch nội dung trong các hội đồng khác nhau.

Bạn có thể sử dụng impromptu-interface để thực hiện công việc này.

using ImpromptuInterface 

sau đó bạn thực hiện một giao diện (Tôi đang sử dụng năng động, vì tôi không biết loại của bạn)

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

tài sản của bạn nên sử dụng giao diện

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

Và để tạo danh sách của bạn chỉ cần thêm .AllActLike<ISelectJob>()

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

Và điều này sẽ làm việc, vì nó tạo ra một proxy dlr trọng lượng nhẹ và đặt bối cảnh cho lớp ẩn danh của nó để nó nghĩ rằng nó luôn có quyền truy cập, không giống như gọi với từ khóa động.

+0

Tuyệt vời nhưng tôi không thể làm cho nó hoạt động. Tôi nhận được lỗi này: 'LINQ to Entities không nhận ra phương pháp 'test.ISelectJob ActLike [ISelectJob] (System.Object, System.Type [])' và phương pháp này không thể được dịch sang biểu thức cửa hàng' Có ý nghĩa gì với bạn không? – sisdog

+0

Vâng, sai lầm của tôi tôi không nghĩ rằng IQueryable, tôi có thể sửa chữa ví dụ. – jbtule

+0

Xong. Tôi nghĩ nó đọc rất rõ ràng hơn. Mặc dù bạn không phải làm cho JobList có kiểu tĩnh, nếu có một lý do nó cần phải là 'List ' thì dòng cuối cùng có thể là 'JobList = qry.AllActLike () .ToList (); 'chỉ giống nhau. – jbtule

1

Điều gì về việc sử dụng một LinqDataSource, thiết lập lệnh OnSelecting, và sử dụng bộ lặp hoặc datalist để hiển thị?

Các vấn đề liên quan