为什么我不能在.ascx中添加这个“自定义控件”?

时间:2012-04-05 18:50:41

标签: c# .net custom-controls

我的.ascx进入文件夹/ cms / context /,它被称为Test.ascx(在.NET 4.0,WebForms上)。

当我尝试添加:

<%@ Register TagPrefix="iz" Namespace="IZ.WebFileManager" Assembly="IZ.WebFileManager" %>

<div>
    <iz:FileManager ID="FileManager1" runat="server" Height="400" Width="600">
        <RootDirectories>
            <iz:RootDirectory DirectoryPath="~/images/" Text="My Documents" />
        </RootDirectories>
    </iz:FileManager>    
</div>

我明白了:

  

System.NullReferenceException。在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。

为什么呢?我该如何解决?感谢

P.S。如果我在Master Page上放置相同的代码也可以...

堆栈追踪:

  

[NullReferenceException:对象引用未设置为对象的实例。]      IZ.WebFileManager.FileView.OnPreRender(EventArgs e)+167      System.Web.UI.Control.PreRenderRecursiveInternal()+112      System.Web.UI.Control.PreRenderRecursiveInternal()+221      System.Web.UI.Control.PreRenderRecursiveInternal()+221      System.Web.UI.Control.PreRenderRecursiveInternal()+221      System.Web.UI.Control.PreRenderRecursiveInternal()+221      System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+4200

Here是您可以获取该插件的链接。我只是将DLL放入Bin文件夹并将该代码写入我的Web用户控件。总是在Master Page上使用,但在WUC中我遇到了麻烦......

2 个答案:

答案 0 :(得分:2)

如果只指定命名空间和程序集,则只能获取控件的ascx.cs部分而不是代码前端文件(.ascx) 由于您的代码隐藏文件(.ascx.cs)依赖于您的代码前端文件(.ascx)来实际实例化您声明的所有内容,因此您需要在寄存器指令中包含Src

<%@ Register Src="~/cms/context/Test.ascx" TagPrefix="iz" TagName="Test" %>

如果您创建的控件没有代码前端文件(以前称为“自定义控件”),您只需指定命名空间和程序集即可,但如果您希望获得代码前端的便利性文件(“用户控件”),您需要指定源。

asp.net框架中的所有内置控件都是作为自定义控件创建的,这意味着微软很难编写它们(它们不能使用ascx文件),但我们更容易使用它们(单个) web.config中的注册行启用所有页面

答案 1 :(得分:1)

我很确定你错过了来源参考:

<%@ Register Src="~/cms/context/Test.ascx" TagPrefix="iz" TagName="Test" %>