Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#I';我试图用自定义类创建一个web用户控件,但我得到的对象没有设置为对象错误的实例_C#_Asp.net_Webforms - Fatal编程技术网

C#I';我试图用自定义类创建一个web用户控件,但我得到的对象没有设置为对象错误的实例

C#I';我试图用自定义类创建一个web用户控件,但我得到的对象没有设置为对象错误的实例,c#,asp.net,webforms,C#,Asp.net,Webforms,我希望你能帮我做这件事。我正在创建一个内部webforms asp.net网站,以显示不同类别的内部使用的文档列表 我决定创建一个自定义文档类,将其放入一个列表中保存文档,然后创建一个自定义web用户控件,以便在站点上的任何位置显示文档 documents类位于my App_Code文件夹中的常规类文件中 cabinet.cs public class Document { private string _Url; private string _Title; publi

我希望你能帮我做这件事。我正在创建一个内部webforms asp.net网站,以显示不同类别的内部使用的文档列表

我决定创建一个自定义文档类,将其放入一个列表中保存文档,然后创建一个自定义web用户控件,以便在站点上的任何位置显示文档

documents类位于my App_Code文件夹中的常规类文件中

cabinet.cs

public class Document
{
    private string _Url;
    private string _Title;
    public Document(string URL, string Title)
    {
        _Url = URL;
        _Title = Title;
    }

    public string URL
    {
        get { return _Url; }
        set { _Url = value; }
    }

    public string Title
    {
        get { return _Title; }
        set { _Title = value; }
    }
}
这段代码运行得很好。然后在我的用户控件中创建一个document类型列表,并在Page_Load()中启动它。然后,我创建了一个公共方法,将新文档添加到列表中

DocDisplay.ascx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class DocDisplay : System.Web.UI.UserControl
{
    private List<Document> _DocList;

    protected void Page_Load(object sender, EventArgs e)
    {
        _DocList = new List<Document>();
    }

    public void Add(string URL, string Title)
    {
        _DocList.Add(new Document(URL, Title));
    }

    public void WriteDocuments()
    {
        foreach (Document doc in _DocList)
        {
            Response.Write($"<span class='document'><a href='{doc.URL}'>{doc.Title}</a></span>");
        }
    }
}
我已在索引页中注册了用户控件

<%@ Register Src="~/DocDisplay.ascx" TagPrefix="uc" TagName="DocDisplay" %>

<uc:DocDisplay ID="pageDocs" runat="server" />


所以我不确定我为什么会犯这样的错误。据我所知,我的代码没有问题。如果您能提供帮助,我将不胜感激。

事件将从控件层次结构的根开始触发,并在叶节点结束<代码>索引。在
DocDisplay之前调用Page\u Load
。Page\u Load有机会实例化列表

\u DocList
字段需要一个值才能被任何东西使用,因此需要尽早进行初始化。使用字段初始值设定项可以很容易地实现这一点。一次声明并分配所有内容:

private List_DocList=new List();
索引
类在页面生命周期的早期实例化其子控件时,
\u DocList
将立即具有对象引用


很有可能会说,“Page_Init会很快被调用;我会在那里调用。”这可能在一开始是可行的,但如果您进行任何动态控件加载,您很快就会发现这是一种平衡行为。动态加载的控件必须播放事件跟踪,因此在静态加载的控件开始触发
Load
事件后,可以触发其
Init
事件。重要的是要将每个事件用于其目的,而不是用于其计时,并使用构造函数(和字段初始值设定项)来初始化非控件类状态。

事件从控件层次结构的根开始触发,并在叶节点结束<代码>索引。在
DocDisplay之前调用Page\u Load
。Page\u Load有机会实例化列表

\u DocList
字段需要一个值才能被任何东西使用,因此需要尽早进行初始化。使用字段初始值设定项可以很容易地实现这一点。一次声明并分配所有内容:

private List_DocList=new List();
索引
类在页面生命周期的早期实例化其子控件时,
\u DocList
将立即具有对象引用


很有可能会说,“Page_Init会很快被调用;我会在那里调用。”这可能在一开始是可行的,但如果您进行任何动态控件加载,您很快就会发现这是一种平衡行为。动态加载的控件必须播放事件跟踪,因此在静态加载的控件开始触发
Load
事件后,可以触发其
Init
事件。重要的是要将每个事件用于其目的,而不是其计时,并使用构造函数(和字段初始值设定项)初始化非控制类状态。

哪里是
pageDocs
实例化的?我更新了帖子。我在html中添加了控件,据我所知,这应该足够了。它在索引页上的页面加载后被调用。有没有办法解决这个问题?pageDocs的实例化在哪里?我更新了帖子。我在html中添加了控件,据我所知,这应该足够了。它在索引页上的页面加载后被调用。有什么办法可以解决这个问题吗?这很好,非常感谢:)非常欢迎这太完美了,非常感谢:)非常欢迎
<%@ Register Src="~/DocDisplay.ascx" TagPrefix="uc" TagName="DocDisplay" %>

<uc:DocDisplay ID="pageDocs" runat="server" />