Пользовательский контроль формы из внешней сборки - PullRequest
0 голосов
/ 05 мая 2018

В конечном итоге я пытаюсь создать элемент управления, который позволит моим пользователям указывать, в каком порядке их поля будут отображаться на странице. Поэтому я создаю собственный элемент управления формой, чтобы решить его.

У меня проблема с тем, что мои веб-элементы управления не инициализируются при загрузке из сборки. У меня есть следующий код:

FieldOrder.ascx:

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

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

* 1010 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. Наконец я зарегистрировал его в 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, я вижу, что мой элемент управления равен нулю. Когда я запускаю этот же элемент управления в обычном сценарии веб-приложения, он не равен нулю. Когда я запускаю этот код в качестве пользовательского веб-элемента управления, кажется, он работает нормально. Есть ли какой-нибудь код инициализации, который нужно запустить при загрузке элементов управления через DLL?

1 Ответ

0 голосов
/ 05 мая 2018

Попробуйте установить [сборка: CMS.AssemblyDiscoverable]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...