从类库中绑定中继器

asp.net web-services e-commerce asprepeater

24 观看

1回复

2168 作者的声誉

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

现在在产品页面上,当用户点击添加到购物车按钮时,它应该实时更新购物车菜单中的产品数量。我在产品页面上使用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 //这是我的内容页面类声明。

Webservice: public class WebMethodLibrary : Page//这是我的webservice类声明。

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();
作者: Abbas 的来源 发布者: 2018 年 7 月 28 日

回应 1


0

26199 作者的声誉

您可以在另一个类的静态方法中执行此操作

Page currentPage = HttpContext.Current.CurrentHandler as Page;

Repeater rptShoppingCart = currentPage.Master.FindControl("rptShoppingCart") as Repeater;
rptShoppingCart.DataSource = shoppingDetails.GetShoppingCart();
rptShoppingCart.DataBind();

但是你的问题并不完全清楚,但如果你使用Ajax调用web方法并试图找到无效的Repeater。webmethod无法访问Page对象。

因此,如果您进行ajax调用以填充Repeater,则需要一种纯JavaScript / jQuery方式来显示购物车项目。

作者: VDWWD 发布者: 2018 年 7 月 28 日
32x32