gpt4 book ai didi

asp.net - 加载时 Web 窗体用户控件空字段

转载 作者:行者123 更新时间:2023-12-01 02:42:56 24 4
gpt4 key购买 nike

我正在尝试迁移较旧的 ASP.NET 网站项目结束成为网页应用 VS2010 中的项目。它似乎主要工作,但是我发现 用户控件 .ascx 文件中的所有控件都设置为 null。

我怀疑这与我如何在需要控件的 aspx 文件中使用声明有关,但我不确定。我创建了一个示例文件和页面并且可以重现它。原始站点是动态编译的,但是我正在尝试将其转换为单个 DLL,因为如果没有新部署,则不会发生任何变化。

任何人都可以给出为什么“TheTextBox”在用户控件的 Page_Load 上为空的原因,以及可能的解决方案?

控制 ASCX 文件 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" />

控件 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?
}
}
}

控制 ASCX 自动生成的设计器文件 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;
}
}

包含控件 WebForm1.aspx 的 WebForm
<%@ 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>

包含控件代码文件 WebForm1.aspx.cs 的 WebForm
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)
{

}
}
}

编辑 :按照建议,将 WebForm 指令替换为
<%@ Register Src="~/ascx/WebUserControl1.ascx" TagName="WebUserControl1" TagPrefix="prefix" %>

结果是一个可爱的黄色死亡屏幕:

CS0260:在类型“PSVOnline.Ascx.WebUserControl1”的声明中缺少部分修饰符;这种类型的另一个部分声明存在
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;

最佳答案

通常,当我注册用户控件时,而不是您在 WebForm1.aspx 上拥有的控件,我会像这样注册它们:

<%@ Register Src="~/WebUserControl1.ascx" TagName="control" TagPrefix="uc" %>

我不知道这是否是您遇到的问题,但这看起来不像注册用户控件的典型方法。

关于asp.net - 加载时 Web 窗体用户控件空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7700819/

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