如何将现有用户控件转换为Kentico Web部件?

时间:2015-05-06 08:33:56

标签: webforms kentico

我有一个现有的usercontrol“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部件上指定属性(例如,如果我们希望将来翻译表单 - 我们可以在网页部分放置“名字标签文字”,用户可以输入“Vorname”而不是“名字”。)

将工作用户控件转换为Kentico Web部件需要做什么?

1 个答案:

答案 0 :(得分:2)

首先,如果没有破坏,则不要修复它,除非你正在寻找或要求你的控制更多样化。如果您的复杂控件使用用户控件Web部件运行良好并且您不能使用Kentico的开箱即用功能,那么我建议坚持使用User Control 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的开发人员确实需要一些时间来摆脱你需要从头开始开发所有内容的心态。在许多情况下,您使用的工具Keento在这个实例中已经为您正在做或需要做的事情创建了标准控件。或者,如果您有一个复杂的解决方案,将其分解为更小的部分并创建更小的用户控件并将其动态加载到您的Web部件中。

祝你好运!

Form documentation
Working with Form Data using API