2011-01-13 19 views
6

我在我的Page_Init事件期間創建了一個List成員變量。我在* .aspx頁面的嵌入式C#代碼中引用列表中的對象時遇到問題。該錯誤是一個運行時綁定器異常,表示「'對象'不包含'JobID'的定義」。無法在嵌入式ASPX代碼中引用動態對象

當調試器被調用時,我可以看到foreach循環的變量j確實有一個名爲JobID的動態屬性,並且它被填充了一個int值。所以,我的問題是爲什麼我的嵌入式C#代碼無法使用動態對象。是否有需要使用動態對象的<%@ Import%>語句?我嘗試了添加<%@Innotationpace =「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

我與嵌入代碼有同樣的困難,我的代碼隱藏返回IEnumerable 。它似乎在某處我的動態被轉換爲對象或其他東西。 @sisdog,即使你修改你的foreach看起來像<%foreach(JobList中的動態j)%>,它似乎不工作。 – kd7iwp

+0

雖然不是爲什麼它不工作的答案,但可以重寫代碼以使用DataBinder.Eval,它將使用反射來獲取JobID屬性。 – Tony

回答

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關鍵字調用不同。

+0

真棒,但我無法得到它的工作。我得到這個錯誤: 'LINQ到實體無法識別方法「test.ISelectJob ActLike [ISelectJob(System.Object的,System.Type的[])」的方法,而這種方法不能被翻譯成店expression' 對你有意義嗎? – sisdog

+0

是的,我的錯誤我不認爲IQueryable,我可以修復這個例子。 – jbtule

+0

完成。我認爲它也更清晰。雖然您不必讓JobList具有靜態類型,但如果有必要將其列爲'List ',那麼最後一行可能是'JobList = qry。AllActLike ().ToList ();'同樣。 – jbtule

1

如何使用LinqDataSource,設置OnSelecting命令,並使用中繼器或數據列表顯示?