【问题标题】:Kentico 10: Custom modules, unigrid, and moreKentico 10:自定义模块、unigrid 等
【发布时间】:2017-01-04 22:22:54
【问题描述】:

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

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

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 页面的内置模板时,您可以简单地选中“显示面包屑”框,但是由于看似显而易见的原因,当 Type = "URL" 时这不起作用。是否有一种标准方法可以在自定义 .aspx 模块页面上连接面包屑?

TIA,-基思

【问题讨论】:

    标签: c# asp.net customization kentico


    【解决方案1】:

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

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

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

    【讨论】:

    • 我尝试了以下没有运气。我错过了什么? [UIElement("VendorOrder", "EditVendorOrder")] [Breadcrumbs] [Breadcrumb(0, TargetUrl = "~/CMSModules/VendorOrders/VendorOrderList.aspx", Text = "Vendor Orders")] [Breadcrumb(1, Text = "Edit Vendor Order", ExistingObject = true)] [Breadcrumb(1, Text = "Edit Vendor Order", NewObject = true)] [EditedObject(VendorOrderInfo.OBJECT_TYPE, "VendorOrderID")] [Title(Text = "Edit Vendor Order", ExistingObject = true)] [Title(Text = "Edit Vendor Order", NewObject = true)]
    • 我发现的唯一区别是我直接继承自 CMSPage,而我发现使用此属性的示例继承自 CMSContentPage(最终继承自 CMSPage)。
    • 只是为了在其中扔另一个扳手,如果我查看 Currency_Edit.aspx,似乎他们正在尝试将父面包屑设置为 Currency_List.aspx,但是当我访问仪表板中的页面时,面包屑只显示“Multistore Configuration => US Dollar”,即使资源说它应该显示“Currencies”。似乎面包屑并不完全按照我的预期工作。
    猜你喜欢
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多