我有一个电子商务网站,用户可以将产品添加到购物车中并继续结帐,我在母版页中对购物车进行了通用显示,因此在所有页面上都保持可见。 >
现在在产品页面上,当用户单击添加到购物车按钮时,应使用产品的数量实时更新购物车菜单。我在产品页面上使用ajax函数添加到购物车按钮,而ajax函数位于单独的类库项目中。
我可以访问转发器控件并从单独的类库的web方法中重新绑定它。
这是我的代码: 母版页:
<asp:Repeater ID="rptShoppingCart" runat="server">
<HeaderTemplate>
<table class="table">
</HeaderTemplate>
<ItemTemplate>
<asp:HiddenField ID="hdnMRP" runat="server" Value='<%# double.Parse(Eval("MaximumRetailPrice").ToString()) * int.Parse(Eval("Quantity").ToString()) %>' />
<tr>
<td><asp:Image ID="imgProduct" Width="75" runat="server" ImageUrl='<%# Eval("Image") %>' /></td>
<td>
<div class="col-md-12"><%# Eval("Name") %></div>
<div class="col-md-12">$<%# double.Parse(Eval("OurPrice").ToString()).ToString("N") %> X <%# Eval("Quantity") %> = $<asp:Label ID="lblTotal" runat="server" Text='<%# (double.Parse(Eval("OurPrice").ToString()) * int.Parse(Eval("Quantity").ToString())).ToString("N") %>'></asp:Label></div>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
<table width="100%">
<tr style="border-top: 1px solid #e4e7ea;">
<td style="float:right;"><h2>$<%# SumShoppingValue().ToString("N") %></h2></td>
</tr>
<tr>
<td style="float:right;"><%# SumShoppingSavings() %></td>
</tr>
</table>
</FooterTemplate>
</asp:Repeater>
MasterPage.cs
rptShoppingCart.DataSource = _cart.GetShoppingCart();
rptShoppingCart.DataBind();
我的内容页面继承自webservice类,该类是一个类库,而我的webservice则继承自UI.Page。
public class ProductPage : WebMethodLibrary
//这是我的内容页面类声明。
网络服务:
public class WebMethodLibrary : Page
//这是我的Web服务类声明。
Page currentPage = new Page(); // I created this object, because my webmethod is a static method, hence i cannot use the Master.FindControl, and i am sure, my issue resides here only. Not sure what object need to be created.
Repeater rptShoppingCart = currentPage.Master.FindControl("rptShoppingCart") as Repeater;
rptShoppingCart.DataSource = shoppingDetails.GetShoppingCart();
rptShoppingCart.DataBind();
答案 0 :(得分:0)
您可以在另一个类的静态方法中执行此操作
Page currentPage = HttpContext.Current.CurrentHandler as Page;
Repeater rptShoppingCart = currentPage.Master.FindControl("rptShoppingCart") as Repeater;
rptShoppingCart.DataSource = shoppingDetails.GetShoppingCart();
rptShoppingCart.DataBind();
但是您的问题尚不完全清楚,但是如果您对Web方法使用Ajax调用,并且会尝试查找无法正常工作的Repeater。 Web方法无法访问Page对象。
因此,如果您通过ajax调用来填充Repeater,则将需要一种纯JavaScript / jQuery的方式来显示购物车商品。