我已浏览了数百个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
答案 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)
是的,你说的是真的。我在你被卡住的同一个地方。我的肚子里有火从柱子跑到柱子,但我想它很快就会消失。
怎么可能这么搞砸你不能在脚手架机制之外工作,所有你真正在做的就是借用一个动态数据管理器,这样你就可以在他们的框架和你新添加的框架中保持模板化。
我进入这个洞的方式是当我尝试在同一页面上显示多个实体数据时。规则的拇指似乎是单一实体,单页。无论我现在是什么错误。在我再次打开瓶子前几天再给它..让那里有啤酒!!!