我正在为一家销售电话号码的公司创建购物车。要购买电话号码,“客户”需要通过各种步骤来配置他们的电话号码。
- 第一步:选择电话号码
- 第二步:给这个号码添加通话套餐
- 第三步:添加附加功能,例如语音邮件等...
- 第四步:查看订单和结帐
到目前为止,我的方法是一个向导式的过程,我将客户选择存储在一个名为 NumberCart 的数据库中的表中。这存储了步骤一和二的所有信息。
第三步有点棘手,因为客户可以有许多与他们选择的号码相关的选项。为了尝试解决这个问题,我决定将他们的功能选择存储在一个名为 FeatureCart 的单独表中。
我一直在使用实体框架来检索和插入数据。可以通过剪切和粘贴此链接来查看数据模型(因为我是新手,Stackoverflow 只允许我发布两个链接)。
[ armourcreative.co.uk/EntityDesignerDiagram.bmp ]
我的问题是,有没有办法检索两个表并在网页中呈现结果,以便它像下面链接上的图像一样显示?
我似乎只能得到两个 EntityDataSources 连接到同一页面上的 NumberFeatureView 和 NumberPackageView 呈现如下链接中的图像:
如您所见,显示用户选择的方式不是很清晰,因为它没有将功能与其所属的电话号码相关联。
我的想法是根据与 NumberPackageView 匹配的 CartID 和 NumberID 以某种方式显示 NumberFeatureView。
如果有人能告诉我如何完成上述工作,我将不胜感激。我可能离题太远了,这就是为什么我迫切需要帮助和指导。
修订
好的,我已经设法让他的购物车使用以下代码正确渲染:
<h3>Please review your order!</h3>
<asp:ListView ID="NumberPackageView_LV" runat="server"
DataSourceID="NumberPackageView_EDM">
<EmptyDataTemplate>
No data was returned.
</EmptyDataTemplate>
<ItemTemplate>
<li style="">
<asp:HiddenField ID="ID" runat="server" Value='<%# Eval("NumberID") %>' />
<strong><asp:Label ID="NumberLabel" runat="server" Text='<%# Eval("Number") %>' /></strong> →
<asp:Label ID="DestinationLabel" runat="server" Text='<%# Eval("Destination") %>' />
<br />
<asp:Label ID="PkgNameLabel" runat="server" Text='<%# Eval("PkgName") %>' />
<asp:Label ID="PkgMonthlyLabel" runat="server" Text='<%# string.Format("{0:c}",(Eval("PkgMonthly"))) %>' />
<!-- ENTITY DATA SOURCE FOR FEATURES -->
<asp:ListView ID="NumberFeatureView_LV" runat="server"
DataSourceID="NumberFeatureView_EDM">
<EmptyDataTemplate>
No data was returned.
</EmptyDataTemplate>
<ItemTemplate>
<li style="">
<asp:Label ID="FeatureNameLabel" runat="server" Text='<%# Eval("FeatureName") %>' />
<asp:Label ID="FeatureSetUpLabel" runat="server" Text='<%# string.Format("{0:c}", (Eval("FeatureSetUp"))) %>' />
<asp:Label ID="FeatureMonthlyLabel" runat="server" Text='<%# string.Format("{0:c}", (Eval("FeatureMonthly"))) %>' />
</li>
</ItemTemplate>
<LayoutTemplate>
<ul ID="itemPlaceholderContainer" runat="server" style="">
<li runat="server" id="itemPlaceholder" />
</ul>
</LayoutTemplate>
</asp:ListView>
<asp:EntityDataSource ID="NumberFeatureView_EDM" runat="server"
AutoGenerateWhereClause="True" ConnectionString="name=ShoppingCartv2Entities"
DefaultContainerName="ShoppingCartv2Entities" EnableFlattening="False"
EntitySetName="NumberFeatureViews"
Select="it.[FeatureName], it.[FeatureSetUp], it.[FeatureMonthly]" Where="">
<WhereParameters>
<asp:SessionParameter DefaultValue="0" Name="CartID" SessionField="ShoppingCartv2_CartId" />
</WhereParameters>
</asp:EntityDataSource>
<!-- ENTITY DATA SOURCE FOR FEATURES [END] -->
</li>
</ItemTemplate>
<LayoutTemplate>
<ul ID="itemPlaceholderContainer" runat="server" style="">
<li runat="server" id="itemPlaceholder" />
</ul>
</LayoutTemplate>
</asp:ListView>
<asp:EntityDataSource ID="NumberPackageView_EDM" runat="server"
AutoGenerateWhereClause="True" ConnectionString="name=ShoppingCartv2Entities"
DefaultContainerName="ShoppingCartv2Entities" EnableFlattening="False"
EntitySetName="NumberPackageViews"
Select="it.[NumberID], it.[Number], it.[Destination], it.[PkgName], it.[PkgMonthly]" Where="">
<WhereParameters>
<asp:SessionParameter DefaultValue="0" Name="CartID" SessionField="ShoppingCartv2_CartId" />
</WhereParameters>
</asp:EntityDataSource>
我现在唯一的问题是,因为结果是在会话购物车上过滤的,所以它会重复存储在 FeatureCart 中的每个数字下的所有特征,而不是显示针对该特定数字选择的特征。(仅当客户将多个电话号码添加到他们的购物车时才会发生这种情况)
例子:
0800 123 0001
- 特色语音信箱
- 功能通话录音
- 特征环组
0800 123 0002
- 特色语音信箱
- 功能通话录音
- 特征环组
代替
0800 123 0001
- 特征环组
0800 123 0002
- 特色语音信箱
- 功能通话录音
谁能告诉我如何只显示针对相关数字选择的功能,而不是每个数字的相同选择(如果有意义的话?)