0

「エントリ」というテーブルがあり、データ アクセスに LINQ to SQL を使用しています。すべてのエントリを取得するストアド プロシージャを作成しました。そのストアド プロシージャをデータ コンテキストのメソッドにマップし、戻り値の型を "Entry" に設定しました。

このメソッド呼び出しの結果を List として返すメソッドをデータ アクセス クラスに作成しました。リストをユーザー コントロールのリピーターにバインドし、ascx ファイルの "EntryId" プロパティにアクセスしようとすると、次のエラーが発生します。

「オブジェクト」には「EntryId」の定義が含まれていません

私の DataAccess クラスの私のメソッド:

public static List<Entry> GetAllEntries()
{
    using (DataClassesDataContext context = new DataClassesDataContext())
    {
        return context.fbGetAllEntries().ToList();
    }
}

ユーザー コントロールの Page_PreRender イベントでは、次のようになります。

//my alias at the top of the file for clairification
using ASPWebControls = System.Web.UI.WebControls;

protected void Page_PreRender(System.Object sender, System.EventArgs e)
{
   rptEntries = new ASPWebControls.Repeater();

   rptEntries.DataSource = DataAccess.GetAllEntries();

   rptEntries.DataBind();
}

そして私のascxファイルで:

<asp:Repeater ID = "rptEntries" runat = "server" >
    <ItemTemplate>
        <tr>
            <td><input type="checkbox" runat="server"  value="<%# Container.DataItem.EntryId %>"  /></td>
        </tr>
    </ItemTemplate>
</asp:Repeater>

このエラーをグーグルで調べたところ、匿名型を使用しているときに発生する可能性があることがわかりましたが、ここではそうではありません。私のリピーターには、強く型付けされたオブジェクトのリストがバインドされていると確信しています。私は明示的にキャストしようとしました:

rptEntries.DataSource = (List<Entry>)DataAccess.GetAllEntries();

これを行うことができるので、私の Entry タイプには EntryId があると確信しています:

foreach (Entry en in (List<Entry>)rptEntries.DataSource)
{
   //when I step through I can see these are the correct values
   int i = en.EntryId;
}

名前空間を ascx ファイルにインポートしようとしました:

<%@ Import NameSpace="Namespace.in.my.DataClass.cs" %> 

物事がどこで横向きになっているのかわかりません。誰かが私が間違っていることを提案できますか? どんな助けでも大歓迎です、ありがとう!

編集:コードブロックを逃した

4

2 に答える 2

2

項目は厳密に型指定されていますが、リピーター コントロールはそれらを のオブジェクト型として公開しますItemTemplate。明示的にボックス化を解除する必要があります。

<%# ((Entry)Container.DataItem).EntryId %>

ASP.Net 4.5には、厳密に型指定されたリピーターがあり、プロパティを指定できItemType、ボックス化解除の必要がなくなることに注意してください。

于 2012-09-12T18:39:52.453 に答える
1

チェックボックスのデータバインディングステートメントで次のことを試してください。

 value="<%# Eval("EntryId") %>"
于 2012-09-12T18:39:23.950 に答える