C#I';我试图用自定义类创建一个web用户控件,但我得到的对象没有设置为对象错误的实例
我希望你能帮我做这件事。我正在创建一个内部webforms asp.net网站,以显示不同类别的内部使用的文档列表 我决定创建一个自定义文档类,将其放入一个列表中保存文档,然后创建一个自定义web用户控件,以便在站点上的任何位置显示文档 documents类位于my App_Code文件夹中的常规类文件中 cabinet.csC#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
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" />