我将使用哪个sitefinity事件来修改结帐窗口小部件的默认结算行为?我已阅读过这些页面
我需要覆盖结帐小部件的这一部分
如果用户是回头客,则送货地址将显示为预先填写用户最后指定的信息。
这会为我做吗? https://docs.sitefinity.com/for-developers-preprocessorder-event
更新:这里要求的是我尝试过的一些代码
连接到OnEcommerceCheckoutPageChanging事件 global.ascx.cs private void Bootstrapper_Initialized(对象发送者,Telerik.Sitefinity.Data.ExecutedEventArgs e) { EcommercePriceServiceCustomTiers.Register();
if (e.CommandName == "Bootstrapped")
{
EventHub.Subscribe<IEcommerceCheckoutPageChangingEvent>(SitefinityWebApp.Custom.Ecommerce.EcommerceCheckoutPageChangingHandler.OnEcommerceCheckoutPageChanging);}
以下是获取地址的代码。这是在页面加载后得到它我需要事件发生之前
public static void OnEcommerceCheckoutPageChanging(IEcommerceCheckoutPageChangingEvent evt)
{
// This event could be raised after the shopping cart was destroyed so make sure you return when the ShoppingCartId is empty or null.
if (evt.ShoppingCartId == Guid.Empty || evt.ShoppingCartId == null)
{
log.Debug("The Cart no longer exists");
return;
}
if(evt.CurrentStepIndex == 0)
{
var ordersManager = OrdersManager.GetManager();
// Get a copy of the shopping cart order based on the evt.ShoppingCartId.
var cartOrder = ordersManager.GetCartOrder(evt.ShoppingCartId);
List<CartAddress> adds = cartOrder.Addresses.ToList();// new List<CartAddress>();
foreach(CartAddress add in adds)
{
/// make the modifications to the addresses here
/// this fires after i need it to , i need the event before this fires
/// note the "evt.CurrentStepIndex == 0" step i am referencing
}
ordersManager.SaveChanges();
}
答案 0 :(得分:0)
我相信这是结帐小部件的默认行为。我刚刚使用默认的小部件设置下了一个订单,然后又回到了另一个订单并填充了我的地址。
如果您需要访问不同的页面事件,可以将代码附加到用户控件。
在小部件模板中,修改第一行,如下所示:
<%@ Control Language="C#" Inherits="SitefinityWebApp.Helpers.Checkout.CheckoutTabStrip" %>
inherits 是一个实现UserControl的类。该文件位于〜/ {ProjectRoot} /Helpers/Checkout/CheckoutTabStrip.cs(可以在任何地方生活)
以下是代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using Telerik.Web.UI;
namespace SitefinityWebApp.Helpers.Checkout
{
public class CheckoutTabStrip : UserControl
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if (FindControl("checkoutTabStrip") is RadTabStrip checkoutTabStrip)
{
checkoutTabStrip.DataBound += CheckoutTabStrip_DataBound;
}
}
private void CheckoutTabStrip_DataBound(object sender, EventArgs e)
{
//DO STUFF
}
}
}
有关事件的更多信息,请查看Rad Tab Strip文档: https://docs.telerik.com/devtools/aspnet-ajax/controls/tabstrip/tabs/working-with-tabs-at-the-server