Tôi có một tình huống rất lạ nơi điều khiển Nhãn của tôi là NULL trong Page_Load. Nên nó có thể được?Kiểm soát máy chủ WebForms ASPNET là NULL trong Page_Load
Tôi có một mẫu Web:
<%@ 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>
Trong Page_Load của mẫu web, tôi chỉ cần làm một điều khiển ArticleColumn
if(!IsPostBack) DataBind();
Những thành viên trông như thế này:
<%@ 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" />
Và mã phía sau trông giống như sau:
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();
}
}
Không thành công khi tôi cố gắng đặt myArticleHeading.Tiếp theo vì điều khiển là rỗng. Làm thế nào điều này thậm chí có thể? Các ASP.NET tự động ràng buộc của điều khiển phải có bằng cách nào đó đã thất bại ...
Tôi đã thử: - Khởi động lại VS 2010 - Switching xây dựng cấu hình - Vệ sinh/Xây dựng lại - tên Thay đổi của các điều khiển để các tập tin thiết kế là đã cập nhật.
Không cần phải nói, không có cách nào ở trên hiệu quả.
Edit: thêm stack trace:
[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
Giải pháp: Tôi chỉ tìm thấy câu trả lời bản thân mình. Sử dụng tờ khai này cho usercontrol trên trang cố định vấn đề:
<%@ Register TagPrefix="cw" TagName="ArticleColumn" Src="~/Templates/Units/ArticleColumn.ascx" %>
khai bị lỗi này được đưa vào sử dụng ReSharper menu chuột phải từ view html:
<%@ Register TagPrefix="cw" Namespace="MyNamespace.Templates.Units" Assembly="MyNamespace" %>
Thanks for the help! :)
Tại sao bạn thực hiện cuộc gọi chung cho DataBind cả trên tải trang của biểu mẫu web và tải trang của người dùng kiểm soát? Trong thực tế, tại sao bạn gọi databind ở tất cả? Ngoài ra, bạn có thể vui lòng bao gồm dấu vết theo dõi ngoại lệ/ngăn xếp không? –
Databinding là nỗ lực tuyệt vọng của tôi trong việc khắc phục vấn đề: S Sẽ thêm dấu vết ngăn xếp. –
K, cho một. Loại bỏ các cuộc gọi DataBind() đó. Họ không làm gì cả. Thứ hai, trước myArticleHeading.Text = page.PageName; dòng, thêm này: string sTest = page.PageName; mục tiêu là để xác nhận rằng nó không phải là biến 'trang' là null. –