来自外部装配的自定义表单控件

时间:2018-05-04 22:36:29

标签: asp.net controls .net-assembly libraries kentico

最终我正在尝试构建一个控件,让我的用户指定他们的字段将在页面上显示的顺序。所以我正在构建一个自定义表单控件来解决它。

我遇到的问题是我的Web用户控件在从程序集加载时没有初始化。我有以下代码:

FieldOrder.ascx:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="FieldOrder.ascx.cs" Inherits="Sologic.Website.Admin.Controls.FieldOrder" %>

<asp:ListBox ID="fieldList" runat="server" />

FieldOrder.ascx.cs:

public partial class FieldOrder : FormEngineUserControl
{
    public override object Value
    {
        get
        {
            return "1";
        }
        set
        {

        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        var className = DocumentManager.Node.ClassName;
        if (String.IsNullOrEmpty(className))
            className = DocumentManager.NewNodeClassName;

        ClassStructureInfo.GetColumns(className).ForEach(cn => fieldList.Items.Add(cn));
    }
}

这一切都被捆绑到一个程序集中,然后被放入Kentico bin /文件夹中。最后我用Kentico注册了它:form control editor

不幸的是我得到了:

[NullReferenceException: Object reference not set to an instance of an object.]
   Sologic.Website.Admin.Controls.FieldOrder.Page_Load(Object sender, EventArgs e) +115
   System.Web.UI.Control.OnLoad(EventArgs e) +102
   CMS.Base.Web.UI.AbstractUserControl.OnLoad(EventArgs e) +67
   System.Web.UI.Control.LoadRecursive() +67
   System.Web.UI.Control.LoadRecursive() +161
   System.Web.UI.Control.LoadRecursive() +161
   System.Web.UI.Control.LoadRecursive() +161
   System.Web.UI.Control.LoadRecursive() +161
   System.Web.UI.Control.LoadRecursive() +161
   System.Web.UI.Control.LoadRecursive() +161
   System.Web.UI.Control.LoadRecursive() +161
   System.Web.UI.Control.LoadRecursive() +161
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1380

当我附加到w3wp进程时,我可以看到我的控件为空。当我在普通的Web应用程序场景中运行此相同的控件时,它不是null。当我像Web用户控件一样运行相同的代码时,它似乎工作得很好。在通过DLL加载控件时是否需要运行某种初始化代码?

1 个答案:

答案 0 :(得分:1)