最终我正在尝试构建一个控件,让我的用户指定他们的字段将在页面上显示的顺序。所以我正在构建一个自定义表单控件来解决它。
我遇到的问题是我的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注册了它:
不幸的是我得到了:
[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加载控件时是否需要运行某种初始化代码?