gpt4 book ai didi

asp.net - ASP NET Web 窗体服务器控件在 Page_Load 中为 NULL

转载 作者:行者123 更新时间:2023-12-02 07:11:48 25 4
gpt4 key购买 nike

我遇到了一个非常奇怪的情况,我的 Label 控件在 Page_Load 中为 NULL。这应该是可能的吗?

我有一个网络表单:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="MyNamespace.Templates.Pages.WebForm1" %>
<%@ Register TagPrefix="cw" Namespace="MyNamespace.Templates.Units" Assembly="MyNamespace" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div style="background-color:yellowgreen;">
FIRST
</div>
<div style="background-color: wheat;">
SECOND
<cw:ArticleColumn runat="server" ID="ac" ArticleID="1899"/>
</div>
</form>
</body>
</html>

在网络表单的 Page_Load 中,我只需执行

if(!IsPostBack) DataBind();

用户控件 ArticleColumn 如下所示:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ArticleColumn.ascx.cs"  Inherits="MyNamespace.Templates.Units.ArticleColumn" %>
<h2><asp:Label runat="server" ID="myArticleHeading" Text="TOM" /></h2>
<p><asp:Label runat="server" ID="myArticleIntro" Text="TOM" /></p>
<asp:Label runat="server" ID="myArticleBody" Text="TOM" />

背后的代码如下所示:

public partial class ArticleColumn : UserControlBase<PageTypes.ArticleBase>
{
public int ArticleID { get; set; }

protected void Page_Load(object sender, EventArgs e)
{
var page = DataFactory.Instance.GetPage(new PageReference(ArticleID));

myArticleHeading.Text = page.PageName;
myArticleIntro.Text = page.Property["IntroText"] != null
? page.Property["IntroText"].ToWebString()
: string.Empty;
myArticleBody.Text = page.Property["MainBody"] != null
? page.Property["MainBody"].ToWebString()
: string.Empty;

DataBind();
}
}

当我尝试设置 myArticleHeading.Text 时失败,因为控件为空。这怎么可能? ASP.NET 自动绑定(bind)控件一定以某种方式失败了...

我尝试过:- 重新启动 VS 2010- 切换构建配置- 清洁/重建- 更改控件名称,以便更新设计器文件。

不用说,以上方法都不起作用。

编辑:添加堆栈跟踪:

[NullReferenceException: Object reference not set to an instance of an object.]
MyNamespace.Templates.Units.ArticleColumn.Page_Load(Object sender, EventArgs e) in C:\DevProjects\CustomerWeb\Main\Source\MyNamespace\Templates\Units\ArticleColumn.ascx.cs:21
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +91
System.Web.UI.Control.LoadRecursive() +74
System.Web.UI.Control.LoadRecursive() +146
System.Web.UI.Control.LoadRecursive() +146
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207

解决方案:我刚刚自己找到了答案。使用页面上的用户控件的此声明解决了问题:

<%@ Register TagPrefix="cw" TagName="ArticleColumn" Src="~/Templates/Units/ArticleColumn.ascx" %>

此错误声明是使用 ReSharper 右键菜单从 html View 添加的:

<%@ Register TagPrefix="cw" Namespace="MyNamespace.Templates.Units" Assembly="MyNamespace" %>

感谢您的帮助! :)

最佳答案

我在上面回答了我自己的问题。

解决方案:我自己找到了答案。使用页面上的用户控件的此声明解决了问题:

<%@ Register TagPrefix="cw" TagName="ArticleColumn" Src="~/Templates/Units/ArticleColumn.ascx" %>

此错误声明是使用 ReSharper 右键单击​​菜单从 html View 添加的:

<%@ Register TagPrefix="cw" Namespace="MyNamespace.Templates.Units" Assembly="MyNamespace" %>

感谢您的帮助! :)

关于asp.net - ASP NET Web 窗体服务器控件在 Page_Load 中为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13305213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com