从类库绑定中继器

时间:2018-07-28 09:14:37

标签: asp.net web-services e-commerce asprepeater

我有一个电子商务网站,用户可以将产品添加到购物车中并继续结帐,我在母版页中对购物车进行了通用显示,因此在所有页面上都保持可见。 >

现在在产品页面上,当用户单击添加到购物车按钮时,应使用产品的数量实时更新购物车菜单。我在产品页面上使用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();

1 个答案:

答案 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的方式来显示购物车商品。