2

過去数日間、これに対する答えを見つけようとして、何百もの Google の検索結果ページを調べました。

サブテーブルへの外部キーであるフィールドの 1 つで、EntityDataSource を使用して、スタンドアロンの動的データ ページを使用してテーブルを表示します。サブテーブルの値を表示したい。私は、NorthWinds データベースを使用して単純化したケースで遊んでいます (以下のコードを参照)。DynamicControl に DataField="Supplier" を割り当てると、代わりにサブテーブル/クラス名 ("DAL.Supplier") が表示されます。DataField="Supplier.CompanyName" を割り当てようとすると、「テーブル 'Product' には 'Supplier.CompanyName' という名前の列がありません」というエラーが表示されます。動的データの編集機能を活用したいので、<%# Eval("Supplier.CompanyName") %> でのテンプレート フィールドの使用はアウトです。

これは、スタンドアロンの動的データ ページでは不可能なのでしょうか? 完全にスキャフォールディングされたシステム内で問題なく動作することは明らかです。それとも、(うまくいけば)何かが足りないのですか?ありがとうございました。

テスト.aspx

<%@ Page Title="" Language="VB" MasterPageFile="~/Master/Site.master" AutoEventWireup="false" CodeFile="Test.aspx.vb" Inherits="Test" %>
<asp:Content ID="Content3" ContentPlaceHolderID="BodyContent" Runat="Server">

<asp:ListView ID="ListView1" runat="server" DataSourceID="theDataSource" DataKeyNames="ProductID">
    <ItemTemplate>
        <tr>
            <td>
                <asp:DynamicControl runat="server" DataField="ProductID" Mode="Edit" />
            </td>
            <td>
                <asp:DynamicControl runat="server" DataField="ProductName" Mode="Edit" />
            </td>
            <td>
                <asp:DynamicControl runat="server" DataField="Supplier" Mode="Edit" />
            </td>
            <td>
                <asp:DynamicControl runat="server" DataField="UnitPrice" Mode="Edit" />
            </td>
            <td>
                <asp:DynamicControl runat="server" DataField="Discontinued" Mode="Edit" />
            </td>
        </tr>
    </ItemTemplate>
    <LayoutTemplate>
        <table runat="server">
            <tr runat="server">
                <td runat="server">
                    <table id="itemPlaceholderContainer" runat="server" border="0">
                        <tr runat="server">
                            <th runat="server">
                                ProductID
                            </th>
                            <th runat="server">
                                ProductName
                            </th>
                            <th runat="server">
                                Supplier
                            </th>
                            <th runat="server">
                                UnitPrice
                            </th>
                            <th runat="server">
                                Discontinued
                            </th>
                        </tr>
                        <tr id="itemPlaceholder" runat="server">
                        </tr>
                    </table>
                </td>
            </tr>
            <tr runat="server">
                <td runat="server">
                </td>
            </tr>
        </table>
    </LayoutTemplate>
</asp:ListView>

<asp:EntityDataSource ID="theDataSource" runat="server" 
        ConnectionString="name=NorthwindEntities" 
        DefaultContainerName="NorthwindEntities" EnableDelete="True" 
        EnableFlattening="False" EnableInsert="True" EnableUpdate="True" 
        Include="Supplier"
        EntitySetName="Products">
    </asp:EntityDataSource>
</asp:Content>

Test.aspx.vb

Imports System.Web.DynamicData
Imports DAL

Partial Class Test
Inherits System.Web.UI.Page

Protected table As MetaTable

Protected Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init
    Listview1.EnableDynamicData(GetType(Product))
    table = theDataSource.GetTable()
    Title = table.DisplayName   
End Sub
End Class
4

2 に答える 2

1

問題が解決しました。このすべてが始まったとき、私は最初にエラーメッセージを受け取りました:

MetaTable を特定できませんでした。データ ソース 'EntityDataSource1' の MetaTable を特定できず、要求 URL から推測できませんでした。テーブルがデータ ソースにマップされていること、データ ソースが有効なコンテキスト タイプとテーブル名で構成されていること、またはリクエストが登録済みの DynamicDataRoute の一部であることを確認してください

それを突き止めようとした結果、asp:DynamicDataManager マークアップを削除し、コード ビハインドで次のように置き換えました。

Listview1.EnableDynamicData(GetType(Product))
table = theDataSource.GetTable()

それは、ことわざのうさぎの穴に私を導いたことが判明しました... MetaTableエラーを取り除きましたが、上で書いた問題をうっかり引き起こしました。http://daviworld.net/?tag=/DynamicDataManagerに感謝します。このエラー メッセージの実際の原因は次のとおりです。

これは、デザイナーのコード生成の問題が原因です。GridView コントロールの DataSource を選択すると、ContextTypeName 属性が EntityDataSourceControl に追加されません。

上記のコード行を削除し、asp:DynamicDataManager をマークアップに追加し直し、ContextTypeName="DAL.NorthwindEntities" を EntityDataSource に追加すると、すべてが希望どおりに機能するようになりました。

于 2012-04-26T14:10:48.283 に答える
0

ええ、あなたが言ったことは本当です。私はあなたが行き詰まったのと同じ場所にいます。腹に火をつけて柱から柱へと走っているが、すぐに消えるかもしれない。

足場メカニズムの外で作業できないほどめちゃくちゃになるのはどうしてですか。実際に行っているのは、動的データマネージャーを借りているだけなので、フレームワークと新しく追加されたフレームワークの両方でテンプレートを維持できます。

この穴に陥ったのは、同じページに複数のエンティティ データを表示しようとしたときです。ルールの親指は、単一エンティティ、単一ページのようです。今のところエラーが発生しているものは何でも。ボトルを再び開ける前に、さらに数日待ってください..ビールを入れましょう!!!

于 2013-01-14T23:03:01.300 に答える