Kentico 10:自定义模块、unigrid 等

Kentico 10: Custom modules, unigrid, and more

我正在尝试尽可能使用 Kentico 最佳实践来开发自定义模块。我一直在关注 https://docs.kentico.com/k10/custom-development/creating-custom-modules 上的文章,但是在涉及以下内容时我找不到方向:

1 - 在处理自定义 UniGrid 时,我没有通过 EditActionUrl 传递参数。根据我的理解,Columns 属性 中声明的第一列应该是 0 索引的字符串格式参数,但是我的“~/CMSModules/VendorOrders/EditVendorOrder.aspx?VendorID={0}”的 EditActionUrl 总是采用 ' {0}' 作为文字。我让它工作的唯一方法是创建一个带有 Response.Redirect() 的自定义 OnAction 处理程序到适当的编辑器页面,但这对我来说不是最佳实践。这是我的相关来源:

ASPX:

<cms:UniGrid ID="gridCurrentOrders" runat="server" OrderBy="Name" 
    Columns="VendorID,Name,ItemCount,TotalQuantity,TotalCost"
    EditActionUrl="~/CMSModules/VendorOrders/EditVendorOrder.aspx?VendorID={0}">
    <GridActions Width="50">
        <ug:Action Name="edit" Caption="$General.Edit$" FontIconClass="icon-edit" FontIconStyle="allow" />
    </GridActions>
    <GridColumns>
        <ug:Column source="Name" caption="Vendor" width="50"></ug:Column>
        <ug:Column source="ItemCount" caption="Item Count" width="25"></ug:Column>
        <ug:Column source="TotalQuantity" caption="Total Qty" width="25"></ug:Column>
        <ug:Column source="TotalCost" caption="Item Cost" width="100%"></ug:Column>
    </GridColumns>
</cms:UniGrid>

隐藏代码:

protected void Page_Load(object sender, EventArgs e)
{
    // Calculate which SKUs need to be reordered as follows:
    // When [AvailableItems] + [Amount unshipped already on an open vendor order] is at or less than [ReorderAt], reorder [ReorderQuantity]
    gridCurrentOrders.DataSource = SKUInfoProvider.GetSKUs()
        .Source(sku => sku.Join<VendorInfo>("SKUVendorID", "VendorID"))
        .Where("SKUAvailableItems <= SKUReorderAt")
        .GroupBy("VendorID", "Name")
        .Columns("VendorID, Name, count(SKUID) as ItemCount, sum(SKUReorderQuantity) as TotalQuantity, sum(SKUVendorCost * SKUReorderQuantity) as TotalCost")
        .Result;
 }

2 - 使用自定义模块 UI 页面的内置模板时,您可以简单地选中 "Display Breadcrumbs" 框,但是由于看似显而易见的原因,当输入 = "URL"。是否有标准方法在自定义 .aspx 模块页面上连接面包屑?

TIA,-基思

是的,您需要创建 OnAction 处理程序

protected void gridElem_OnAction(string actionName, object actionArgument)
{
    if (actionName == "edit")
    {
        URLHelper.Redirect(UrlResolver.ResolveUrl("/CMSModules/VendorOrders/EditVendorOrder.aspx?VendorID=" + Convert.ToString(actionArgument)));
    }
}

对于您的第二个问题,您可以通过将属性添加到页面的 class 来手动完成,如下面的屏幕截图所示