Ich versuche, ein älteres ASP.NET-System zu migrieren. Web-Site Projekt zu einem Web-Anwendung Projekt in VS2010. Es scheint meist zu funktionieren, aber ich finde, dass Benutzerkontrollen en .ascx Dateien haben alle ihre eigenen Steuerelemente auf Null gesetzt.
Ich vermute, dass es etwas damit zu tun hat, wie ich Deklarationen in den aspx-Dateien verwende, die die Steuerelemente benötigen, aber ich bin mir nicht sicher. Ich habe eine Beispieldatei und -seite erstellt und kann das Problem reproduzieren. Die ursprüngliche Website wurde dynamisch kompiliert, aber ich versuche, sie in eine einzige DLL zu verwandeln, da sich ohne eine neue Bereitstellung nichts ändern wird.
Kann jemand einen Grund, warum die "TheTextBox" würde null auf Page_Load der Benutzer-Steuerelement, und mögliche Lösung sein?
ASCX-Datei steuern WebUserControl1.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl1.ascx.cs" Inherits="MyNamespace.Ascx.WebUserControl1" ClassName="MyNamespace.Ascx.WebUserControl1" %>
<asp:TextBox runat="server" ID="TheTextBox" MaxLength="128" />
Steuerung ASCX CodeFile WebUserControl1.ascx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace MyNamespace.Ascx
{
public partial class WebUserControl1 : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
// TheTextBox is null at this point. Why?
}
}
}
Steuerung ASCX AutoGenerated Designer File WebUserControl1.ascx.designer.cs
namespace MyNamespace.Ascx {
public partial class WebUserControl1 {
/// <summary>
/// TheTextBox control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox TheTextBox;
}
}
WebForm, die das Steuerelement enthält WebForm1.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" Inherits="MyNamespace.WebForm1" Codebehind="WebForm1.aspx.cs" %>
<%@ Register NameSpace="MyNamespace.Ascx" Assembly="MyAssembly" TagPrefix="prefix" %>
<asp:Content ID="Content1" ContentPlaceHolderID="PageHead" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<prefix:WebUserControl1 runat="server" ID="IncludedControl" />
</asp:Content>
WebForm, die das Steuerelement CodeFile enthält WebForm1.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace MyNamespace
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
Editar : Wie vorgeschlagen, ersetzen Sie die WebForm-Direktive durch
<%@ Register Src="~/ascx/WebUserControl1.ascx" TagName="WebUserControl1" TagPrefix="prefix" %>
führt zu einem schönen gelben Bildschirm des Todes:
CS0260: Fehlender partieller Modifikator bei der Deklaration des Typs 'PSVOnline.Ascx.WebUserControl1'; eine andere partielle Deklaration dieses Typs existiert
Line 129:
Line 130: [System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()]
Line 131: public class WebUserControl1 : global::MyNamespace.Ascx.WebUserControl1 {
Line 132:
Line 133: private static bool @__initialized;