私のLabelコントロールがPage_LoadでNULLであるという非常に奇妙な状況があります。それは可能ですべきか?ASPNET WebForms Server ControlがPage_LoadでNULLになっています
私はWebフォームがあります。
<%@ 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" />
:WebフォームのPage_Loadので
<%@ 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>
を、私は単に
if(!IsPostBack) DataBind();
を行うユーザ制御ArticleColumnは次のようになります
コードは次のようになります:
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();
}
}
コントロールがnullのためmyArticleHeading.Textを設定しようとすると失敗します。これはどのように可能ですか?コントロールのASP.NET自動バインディングは、何らかの形で失敗している必要があります...
私が試してみました: - 再起動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" %>
この障害のある宣言は、HTMLビューからReSharperの右クリックメニューを使用して追加されました。助けを
<%@ Register TagPrefix="cw" Namespace="MyNamespace.Templates.Units" Assembly="MyNamespace" %>
感謝を! :)
なぜ、Webフォームのページの読み込みとユーザーコントロールのページの読み込みの両方でDataBindを汎用呼び出しをしていますか?実際に、なぜあなたはdatabindをまったく呼びますか?また、例外/スタックトレースを含めてください。 –
データバインディングは、問題を解決するための私の必死の試みです:Sスタックトレースを追加します。 –
K、1つです。それらのDataBind()呼び出しを取り除く。彼らは何もしていない。次に、myArticleHeading.Text = page.PageNameの前に。これを追加してください:string sTest = page.PageName;目標はnullである 'page'変数ではないことを確認することです。 –