外键表字段未显示在启用独立动态数据的列表视图中

时间:2012-04-25 21:50:57

标签: asp.net dynamic-data asp.net-dynamic-data

我已浏览了数百个Google结果页,试图在过去几天找到答案。

使用独立动态数据页面使用EntityDataSource显示表,其中一个字段是子表的外键。我希望它显示子表中的值。我一直在玩一个使用NorthWinds数据库的简化案例(见下面的代码)。如果我为DynamicControl分配一个DataField =“Supplier”,它会显示子表/类名(“DAL.Supplier”)。如果我尝试分配DataField =“Supplier.CompanyName”,则会出现“表''产品'没有名为'Supplier.CompanyName'的列的错误”。由于我想利用动态数据的编辑功能,使用带有<%#Eval(“Supplier.CompanyName”)%>的模板化字段。出去了。

对于独立的动态数据页,这是不可能的吗?它在一个完全支架系统中显然可以正常工作。或者我(希望)只是遗漏了什么?谢谢。

Test.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

2 个答案:

答案 0 :(得分:1)

问题解决了。当所有这一切开始时,我最初得到了错误消息:

  

无法确定MetaTable。无法确定数据源'EntityDataSource1'的MetaTable,并且无法从请求URL推断出MetaTable。确保表已映射到dats源,或者数据源配置了有效的上下文类型和表名,或者请求是已注册的DynamicDataRoute的一部分

试图追踪到这一点导致我摆脱了asp:DynamicDataManager标记,并在代码隐藏中替换它:

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

事实证明这让我陷入了众所周知的兔子洞......虽然它摆脱了MetaTable错误,却无意中引起了我上面写的问题。非常感谢:http://daviworld.net/?tag=/DynamicDataManager指出此错误消息实际上是由以下原因引起的:

  

这是由于Designer代码生成的问题。为GridView控件选择DataSource时,它不会将ContextTypeName属性添加到EntityDataSourceControl。

一旦我删除了上面的代码行,并在asp:DynamicDataManager中添加回标记,然后将一个ContextTypeName =“DAL.NorthwindEntities”添加到EntitiyDataSource,现在一切都按照人们的意愿运行。< / p>

答案 1 :(得分:0)

是的,你说的是真的。我在你被卡住的同一个地方。我的肚子里有火从柱子跑到柱子,但我想它很快就会消失。

怎么可能这么搞砸你不能在脚手架机制之外工作,所有你真正在做的就是借用一个动态数据管理器,这样你就可以在他们的框架和你新添加的框架中保持模板化。

我进入这个洞的方式是当我尝试在同一页面上显示多个实体数据时。规则的拇指似乎是单一实体,单页。无论我现在是什么错误。在我再次打开瓶子前几天再给它..让那里有啤酒!!!