【问题标题】:Code-behind page cannot "see" any items/controls declared in the aspx page代码隐藏页面无法“看到”在 aspx 页面中声明的任何项目/控件
【发布时间】:2012-03-06 03:31:03
【问题描述】:

这是我的 Default.aspx 页面(删除了不必要的细节):

    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <div id="login">
    <!-- a bunch of markup has been removed, so this html will appear wrong and not valid, but it actually is -->
    <table align="center" width="80%" cellpadding="0" cellspacing="0" class="loginBg">
        <tr>
            <td colspan="2"><img src="images/Login_top.jpg" /></td>
        </tr>
        <asp:Panel runat="server" ID="pnlLoginIn">
        <tr>
            <td style="padding-left:20px;">Username</td>
            <td style="padding-right:15px;" align="right"><asp:TextBox id="txtUsername" runat="server" /></td>
            <asp:RequiredFieldValidator runat="server" ID="rfvUserName" ErrorMessage="*" ControlToValidate="txtUsername" ValidationGroup="credentials" Display="Dynamic" />
        </tr>
        <tr>
            <td style="padding-left:20px;">Password</td>
            <td style="padding-right:15px;" align="right"><asp:TextBox ID="txtPassword" TextMode="Password" runat="server" /></td>
                <asp:RequiredFieldValidator runat="server" ID="rfvPassword" ErrorMessage="*" ControlToValidate="txtPassword" ValidationGroup="credentials" Display="Dynamic" />
        </tr>
        <!-- BUT THE PANEL IS HERE?! -->
        <asp:Panel ID="pnlInvalidCredentials" runat="server">
        <tr>
            <td colspan="2" align="center" style="color: Red;"><asp:Literal runat="server" ID="litInvalidCredentials" Text="Invalid Username or Password" />
            </td>
        </tr>
        </asp:Panel>
<!-- more code has been removed down here...I just left the block commented in where the pnlInvalidCredential lives -->
    </asp:Content>

这是代码隐藏(删除了不必要的细节):

namespace webapp
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            (webapp.MasterPages.MasterPage)Page.Master).headerImage = "default";
            this.Master.headerImage = "default";

            if (!Page.IsPostBack)
            {
                this.pnlInvalidCredentials.Visible = false; // error is here
                this.BindPressRoomItem();
            }
        }
    }
}

这个页面/代码隐藏是顶级的,它不是任何文件夹或任何东西。此外,这个项目是一个 ASP.NET Web 应用程序,它从旧的网站 site 项目中借用代码。我没有向任何文件“添加现有”,所有文件都是“添加新”以防止出现兼容性问题。试过this,没用。

在代码隐藏中,每次尝试操作在 aspx 页面中声明的项目都会导致如下错误:

“_Default”不包含“pnlInvalidCredentials”的定义

此上下文中不存在名称“txtUsername”。

【问题讨论】:

  • 顺便说一句,您是否需要一个结束
    标记.. 不是这样可以解决您的问题,但是如果要保持一致,您可以粘贴在页面的标题中吗?我想看看 是什么样子的
  • 嘿,谢谢。是的,我删除了示例不需要的代码,并且不小心取出了结束的
  • 这是一个网站项目还是网络应用项目?
  • 您的 HTML 绝对不正确。你的 VS 应该对此让步
  • @kmarks2:即使考虑到删除的代码,它仍然是不正确的。你不能在&lt;/tr&gt;&lt;tr&gt;等之间放任何东西。
  • 标签: c# asp.net .net compiler-errors code-behind


    【解决方案1】:

    尝试将 Default.aspx 页面中的“CodeBehind”属性更改为“CodeFile”。

    【讨论】:

    • 感谢您的提示。不幸的是,这不起作用。使用 ASP.NET 的一切看起来都那么 hacky...为什么要获取一个页面并且它的代码隐藏链接如此之难,我的意思是这些文件是由 VS 生成的。
    • 如果旧的 .aspx 页面是在 .net 1.1 中完成的,那么更改为 CodeFile 将起作用.. 问题是.. 旧页面是在什么版本中完成的.. 您是否尝试过访问 pnlInvalidCredentials 而不使用 this.pnlInvalidCredentials
    • @DJKRAZE 有可能。这是一个旧项目,最初是在 VS2008 中完成的,但这就是我所知道的。最初的开发者早已不复存在。当您说“在不使用 this.pnlInvalidCredentials 的情况下访问 pnlInvalidCredentials”时,您是什么意思?还有什么其他方法可以在代码隐藏中访问它?谢谢一百万。
    • 如果您要使用 HTML.Controls 添加,您可以仅通过其名称访问它,但听起来 Lngenu 为您提供了正确的修复..
    【解决方案2】:

    如果这是一个 Web 应用程序,有时会发生 *.designer.cs 文件未使用您的最新更改进行更新。

    试试这个:

    • 取下面板(剪掉它)
    • 保存
    • 撤消
    • 再次保存(这将重新生成 *.designer.cs 文件)
    • 重建

    编辑:

    导致 *.designer.cs 文件重新生成失败的其他可能性是语法错误,例如您的 aspx 页面中缺少结束标记。

    【讨论】:

    • 不知道是不是语法错误,比如缺少结束标签。这也会导致 Designer.cs 的构建失败。
    • 有可能。我已经更正了所有与验证相关的警告,除了“'img' is missing required attr 'alt'”之类的小问题。
    • 有些事情,我注意到了。 asp:RequiredFieldValidator 在 tr 标签内。尝试将其移动到 td 标签内。此外,第一个表没有结束,第一个面板也没有结束。
    【解决方案3】:

    自从我刷新此页面以来,您已经删除了 html 文件顶部带有 page 指令的行,但看起来您可能需要包含命名空间。

    试试:

    Inherits="webapp._Default" 而不是 Inherits="_Default"

    【讨论】:

    • 感谢您的提示。我已经尝试过了,但它没有用。然后我又试了一次,它解决了我所有的问题。我想知道为什么在处理遗留代码时事情(我使用的是 VS2010)非常不一致。
    【解决方案4】:

    我也遇到了同样的问题。为我解决的问题是:

    • 在我的代码隐藏文件中,该类被定义为“公共类”。将其更改为“Partial Class”,然后单击“Convert to Web Application”重新生成“Designer”文件并修复了问题。

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签