【问题标题】:How do I convert an existing usercontrol to a Kentico Web Part?如何将现有的用户控件转换为 Kentico Web 部件?
【发布时间】:2015-07-16 06:42:36
【问题描述】:

我有一个现有的用户控件“BigForm.ascx”:

<%@ Control 
    Language="C#" AutoEventWireup="true" 
    CodeFile="BigForm.ascx.cs" Inherits="BigForm" %>

<asp:Panel runat="server" DefaultButton="btnSubmit">
    <%--SUPER COMPLICATED FORM--%>
    <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" />
</asp:Panel>

BigForm.ascx 非常复杂——它为占位符动态添加子控件,封装了大量业务逻辑,标记高度自定义等等。

我可以使用“用户控制”Web 部件将 BigForm.ascx 添加到 Kentico,它运行良好。

但是,如果我将 BigForm.ascx 转换为“适当的”Web 部件 - 通过从 CMSAbstractWebPart 而不是从 UserControl 继承 - 回发不会触发。我会点击提交按钮,没有任何反应。

我在designing forms using the form builder 上看到过Kentico doco,但是这个用户控件已经可以完美运行了,我怀疑使用WYSIWIG 构建它太复杂了。更不用说我更喜欢使用 Visual Studio 构建表单。

我的理解是,使用 Web 部件是使用 Kentico 做的“正确”事情,这样做会让用户在该 Web 部件上指定属性(例如,如果我们想在将来翻译表单 - 我们可以在 Web 部件上放置“名字标签文本”,用户可以输入“Vorname”而不是“名字”)。

我需要怎么做才能将工作的用户控件转换为 Kentico Web 部件?

【问题讨论】:

    标签: webforms kentico


    【解决方案1】:

    首先,如果它没有损坏,则不要修复它,除非您正在寻找或需要在您的控制中拥有更多的多样性。如果您的复杂控件使用用户控制 Web 部件运行良好,并且您不适合使用 Kentico 的开箱即用功能,那么我建议坚持使用用户控制 Web 部件,因为它可以工作。

    如果您有兴趣了解有关如何创建 Web 部件、其生命周期与标准用户控件有何不同以及使您的控件更具动态性的更多信息,那么read this documentation

    您会注意到的一大区别是Page_Load 事件存在,但使用不多。使用了OnContentLoaded 事件,它发生在标准的asp.net OnInit 事件之前。这是您设置所有属性值并加载数据的地方。在 Page_Load 事件之后,按钮事件确实发生,就像在标准表单中一样。就像标准的 asp.net 一样,任何动态加载的控件都需要在每次回发时重新加载/创建。保存数据的控件也需要绑定在每个回发上。这并不意味着您必须再次检索数据,因为缓存引擎很棒,这意味着控件必须分配一个DataSet,而不是有条件地加载。采取look at this example 了解如何在 Kentico 中加载缓存数据。

    关于构建表单,是的,它在 Visual Studio 中运行良好,没有分歧,尽管当您必须手动创建和处理所有 CRUD 操作而不是简单地在 Web 部件或 globally 中捕获这些事件时,它使它更容易、更动态、更健壮和更快地构建。

    作为一名长期的 Kentico 开发人员,要摆脱需要从头开始开发一切的心态确实需要一点时间。在许多情况下,您使用的工具(在本例中为 Kentico)已经为您正在做或需要做的事情创建了标准控件。或者,如果您有一个复杂的解决方案,将其分解为更小的部分并创建更小的用户控件并将它们动态加载到您的 Web 部件中效果很好。

    祝你工作顺利!

    Form documentation
    Working with Form Data using API

    【讨论】:

    • 谢谢布伦登。我暂时让它们保持原样。
    猜你喜欢
    • 2012-07-08
    • 2022-08-18
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 2014-01-12
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多