2011-01-13 241 views
6

Page_Initイベント中にListメンバー変数を作成しています。 * .aspxページの埋め込みC#コードからリスト内のオブジェクトを参照する際に問題が発生しました。エラーは、 ''オブジェクト 'に' JobID 'の定義が含まれていないランタイムバインダー例外です。埋め込みASPXコードで動的オブジェクトを参照できません

デバッガを呼び出すと、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> 
+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プロキシを生成し、匿名クラスのコンテキストをselfに設定するので、動的キーワードを使用した呼び出しとは異なり、常にアクセス権があると考えられます。

+0

素晴らしいですが、動作させることができませんでした。 'LINQ to Entitiesが 'test.ISelectJob ActLike [ISelectJob](System.Object、System.Type [])'メソッドを認識しません。このメソッドはストア式に変換できません。 ' あなたに感謝しますか? – sisdog

+0

はい、私の間違いはIQueryableだとは思わなかった、私は例を修正することができます。 – jbtule

+0

完了。私はそれももっとはっきりと読んでいると思う。 JobListに静的型を持たせる必要はありませんが、理由があれば 'List 'が必要です。最後の行は 'JobList = qry 'です。AllActLike ().ToList (); 'まったく同じです。 – jbtule

1

LinqDataSourceを使用し、OnSelectingコマンドを設定し、リピータまたはデータリストを使用して表示することはどうですか?

関連する問題