C# 名称';控制';在当前上下文中不存在

C# 名称';控制';在当前上下文中不存在,c#,asp.net,webforms,servercontrols,C#,Asp.net,Webforms,Servercontrols,我继承了一个我正在处理的站点,在从存储库和构建中获取源代码,然后清除一些引用错误时,我遇到了一个错误,我仍然收到1000多个此错误的实例: 名称“pnlDetails”在当前上下文中不存在(将“panelDetails”替换为我的任何控件名称) 这似乎表明服务器端引用的控件没有在页面上声明,或者其中没有runat=server,但事实上它们有。这也可能是继承属性不匹配的问题,但确实存在。我以前搜索过stackoverflow并看到过这个问题,但在尝试了上面提到的一些解决方案后,它们并没有起到任何

我继承了一个我正在处理的站点,在从存储库和构建中获取源代码,然后清除一些引用错误时,我遇到了一个错误,我仍然收到1000多个此错误的实例:

名称“pnlDetails”在当前上下文中不存在(将“panelDetails”替换为我的任何控件名称)

这似乎表明服务器端引用的控件没有在页面上声明,或者其中没有runat=server,但事实上它们有。这也可能是继承属性不匹配的问题,但确实存在。我以前搜索过stackoverflow并看到过这个问题,但在尝试了上面提到的一些解决方案后,它们并没有起到任何作用。我的页面没有任何设计器文件。下面是来自aspx和aspx.cs页面的一些代码片段。(为保护客户隐私而编辑的某些信息)

我的问题是,为什么我不能引用服务器端的控件?”面板详细信息、“rpAddresses”等

default.aspx:

<%@ Page Title="" Language="C#" MasterPageFile="~/org.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="directory_Default" %>

<%@ Register Assembly="System.Web.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=xxxx"
    Namespace="System.Web.UI.WebControls" TagPrefix="asp" %>
<%@ Register TagPrefix="nu" Namespace="Leap.NuCaptcha" Assembly="leapmarketing" %>

<asp:Content ID="Content1" ContentPlaceHolderID="cphHead" Runat="Server">
    <title>xxxx</title>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="cphBreadCrumb" Runat="Server">
    <div id="breadCrumbFrame"><a href="http://www.org.org" title="xxx">Home</a>  &gt; <a href="/directory" title="xxx">xxx</a></div>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="cphBody" Runat="Server">
    <h3 class="sectionTitle">&nbsp;xxx&nbsp;</h3>

    <!--//////////// Begin Searchbox Panel ////////////-->
    <asp:Panel ID="pnlSearchbox" Visible="true" runat="server" DefaultButton="lnkSearch">
        <div class="info">
            xxx <a href="http://www.org.org" target="_blank" style="text-decoration: underline">xxx</a>.
        </div>
        <h3 style="padding-bottom: 10px;">xxx:</h3>
        <p>xxx <a href="http://www.org.org/">xxx</a>.</p>
        <br />
        <br />
        <div class="addressLine">
            <asp:Label ID="lblFirstName" CssClass="addressLabel" runat="server" Text="First Name"></asp:Label>
            <asp:TextBox ID="txtFirstName" CssClass="addressEdit" runat="server"></asp:TextBox>
        </div>
        <div class="addressLine">
            <asp:Label ID="lblLastName" CssClass="addressLabel" runat="server" Text="Last Name"></asp:Label>
            <asp:TextBox ID="txtLastName" CssClass="addressEdit" runat="server"></asp:TextBox>
        </div>
        <div class="addressLine">
            <asp:Label ID="lblCity" CssClass="addressLabel" runat="server" Text="City"></asp:Label>
            <asp:TextBox ID="txtCity" CssClass="addressEdit" runat="server"></asp:TextBox>
        </div>
        <div class="addressLine">
            <asp:Label ID="lblDistrict" CssClass="addressLabel" runat="server" Text="District"></asp:Label>
            <asp:DropDownList ID="ddlDistrict" CssClass="addressDropDown" runat="server" DataSourceID="dsDistricts"
                DataTextField="Name" DataValueField="DistrictID"
                AppendDataBoundItems="True">
                <asp:ListItem Value="">All Districts</asp:ListItem>
            </asp:DropDownList>
        </div>
        <div class="addressLine">
            <asp:Label ID="lblSpecialty" CssClass="addressLabel" runat="server" Text="Specialty"></asp:Label>
            <asp:DropDownList ID="ddlSpecialty" CssClass="addressDropDown" runat="server"
                DataSourceID="dsSpecialties" DataTextField="xxx_certification"
                DataValueField="QualificationID" AppendDataBoundItems="True">
                <asp:ListItem Value="">All xxx</asp:ListItem>
            </asp:DropDownList>
        </div>
        <div class="addressLine">
            <div class="addressLabel">&nbsp;</div>
            <asp:LinkButton ID="lnkSearch" CssClass="navButton" runat="server"
                onclick="lnkSearch_Click">Search</asp:LinkButton>
        </div>
    </asp:Panel>
    <asp:LinqDataSource ID="dsDistricts" runat="server"
        ContextTypeName="org.Xrm.XrmDataContext" Select="new (DistrictID, Name)"
        TableName="Districts">
    </asp:LinqDataSource>
    <asp:LinqDataSource ID="dsSpecialties" runat="server"
        ContextTypeName="org.Xrm.XrmDataContext"
        Select="new (QualificationID, xxx_certification)" TableName="Qualifications"
        Where="EducationTypeID == @EducationTypeID">
        <whereparameters>
            <asp:Parameter DefaultValue="000" Name="EducationTypeID" 
                DbType="Guid" />
        </whereparameters>
    </asp:LinqDataSource>

    <!--//////////// Begin Search Results Panel ////////////-->

    <asp:Panel ID="pnlResults" Visible="false" runat="server">
        <div id="ResultsTop" style="margin-bottom: 15px;">
            <div id="ResultsLeft" style="float: left; padding-top: 5px;">
                <h2>Search Results - <span class="BlackResults">
                    <asp:Label ID="lblCount" runat="server" Text=""></asp:Label></span></h2>
            </div>
        </div>
        <br />
        <br />
        <br />
        <asp:LinkButton ID="lnkNewSearch" CssClass="navButtonLarge" runat="server" OnClick="lnkNewSearch_Click">New Search</asp:LinkButton>
        <br />
        <br />
        <div align="center">
            <asp:DataPager ID="DataPager2" runat="server" PagedControlID="lvResults"
                PageSize="25">
                <fields>
                    <asp:NextPreviousPagerField ShowFirstPageButton="True" 
                        ShowNextPageButton="False" ShowPreviousPageButton="True" />
                    <asp:NumericPagerField ButtonCount="10" />
                    <asp:NextPreviousPagerField ShowLastPageButton="True" 
                        ShowNextPageButton="True" ShowPreviousPageButton="False" />
                </fields>
            </asp:DataPager>
        </div>
        <br />
        <asp:ListView ID="lvResults" runat="server" DataSourceID="dsSearchResults">
            <itemtemplate>
                <tr style="">
                    <td class="DirectoryItems">
                        <asp:LinkButton ID="lnkDetails" CommandArgument='<%# Eval("ID") %>' OnCommand="lnkDetails_Click" runat="server"><%# Eval("xxx") %></asp:LinkButton>
                    </td>
                    <td class="DirectoryItems">
                        <asp:Label ID="LocationLabel" runat="server" Text='<%# Eval("Location") %>' />
                    </td>
                    <td class="DirectoryItems">
                        <asp:Label ID="StatusLabel" runat="server" Text='<%# Eval("Status") %>' />
                    </td>
                </tr>
            </itemtemplate>
            <emptydatatemplate>
                <table runat="server" style="">
                    <tr>
                        <td>
                            No data was returned.</td>
                    </tr>
                </table>
            </emptydatatemplate>
            <layouttemplate>
                <table runat="server" width="100%">
                    <tr runat="server">
                        <td runat="server">
                            <table ID="itemPlaceholderContainer" runat="server" border="0" style="border-collapse: collapse;" width="99%">
                                <tr runat="server" style="border-bottom:1px solid #828283; margin-top:5px; margin-bottom:5px; padding-top:5px; padding-bottom:5px;">
                                    <td runat="server" width="40%">
                                        <p class="DirectoryResultsHeader">xxx</p></td>
                                    <td runat="server" width="30%">
                                        <p class="DirectoryResultsHeader">Location</p></td>
                                    <td runat="server" width="30%">
                                        <p class="DirectoryResultsHeader">Status</p></td>
                                </tr>
                                <tr ID="itemPlaceholder" runat="server">
                                </tr>
                            </table>
                        </td>
                    </tr>
                    <tr runat="server">
                        <td runat="server" style="">
                        </td>
                    </tr>
                </table>
            </layouttemplate>
        </asp:ListView>
        <br />
        <br />
        <div align="center">
            <asp:DataPager ID="DataPager1" runat="server" PagedControlID="lvResults"
                PageSize="25">
                <fields>
                    <asp:NextPreviousPagerField ShowFirstPageButton="True" 
                        ShowNextPageButton="False" ShowPreviousPageButton="True" />
                    <asp:NumericPagerField ButtonCount="10" />
                    <asp:NextPreviousPagerField ShowLastPageButton="True" 
                        ShowNextPageButton="True" ShowPreviousPageButton="False" />
                </fields>
            </asp:DataPager>
        </div>
        <asp:SqlDataSource ID="dsSearchResults" runat="server" OnSelected="dsSearchResults_Selected"
            ConnectionString="<%$ ConnectionStrings:MSCRM %>" CancelSelectOnNullParameter="false"
            SelectCommand="
                        SELECT * from sometable
            ">
            <selectparameters>
                    <asp:ControlParameter ControlID="txtFirstName" DbType="String" Name="FirstName" DefaultValue="" ConvertEmptyStringToNull="false" />
                    <asp:ControlParameter ControlID="txtLastName" DbType="String" Name="LastName" DefaultValue="" ConvertEmptyStringToNull="false" />
                    <asp:ControlParameter ControlID="txtCity" DbType="String" Name="City" DefaultValue="" ConvertEmptyStringToNull="false" />
                    <asp:ControlParameter ControlID="ddlDistrict" DbType="Guid" Name="District" ConvertEmptyStringToNull="true" />
                    <asp:ControlParameter ControlID="ddlSpecialty" DbType="Guid" Name="Specialty" ConvertEmptyStringToNull="true" />
                </selectparameters>
        </asp:SqlDataSource>
    </asp:Panel>

    <!--//////////// Begin Details Panel ////////////-->

    <asp:Panel ID="pnlDetails" Visible="false" runat="server">
        <h3>xxx Information</h3>
        <br />
        <asp:Repeater ID="rpDetails" runat="server" DataSourceID="dsDetails">
            <itemtemplate>
                <table border="0">
                    <tr>
                        <td width="125"><b>Given Name:</b></td>
                        <td><%# Eval("FirstName") %></td>
                    </tr>
                    <tr>
                        <td width="125"><b>Surname:</b></td>
                        <td><%# Eval("LastName") %></td>
                    </tr>
                    <tr>
                        <td width="125"><b>Gender:</b></td>
                        <td><%#Eval("Gender") %></td>
                    </tr>
                    <tr>
                        <td width="125"><b>Status:</b></td>
                        <td><%# Eval("Status") %></td>
                    </tr>
                    <asp:Panel ID="pnlSpecialty" runat="server" Visible='<%# Eval("Status").ToString() == "xxx" || Eval("Status").ToString() == "xxx" || Eval("Status").ToString() == "xxx" ? true : false %>'>
                        <tr>
                            <td width="125"><b>xxx:</b></td>
                            <td>
                                <asp:Repeater ID="xxx" runat="server" DataSourceID="xxx">
                                    <ItemTemplate>
                                        <%# Eval("xxx") %><br />
                                    </ItemTemplate>
                                </asp:Repeater>
                            </td>
                        </tr>
                    </asp:Panel>
                    <tr>
                        <td width="125"><b>xxx:</b></td>
                        <td><%# Eval("xxx") %></td>
                    </tr>
                </table>
            </itemtemplate>
        </asp:Repeater>
        <br />
        <br />
        <asp:Repeater ID="rpAddresses" runat="server" DataSourceID="dsAddresses" OnItemDataBound="rpAddresses_DataBound">
            <headertemplate>
                <h3>xxx</h3><br />
            </headertemplate>
            <itemtemplate>
                <table border="0">
                    <tr>
                        <td valign="top" width="125"><b><asp:Label ID="lblAddressType" runat="server" Text='<%# Eval("Type") %>' /></b></td>
                        <td valign="top">
                            <asp:Label ID="lblAddressStreet1" runat="server" Text='<%# Eval("Street1") + "<br />" %>' Visible='<%# Convert.IsDBNull(Eval("Street1")) ? false : true %>' />
                            <asp:Label ID="lblAddressStreet2" runat="server" Text='<%# Eval("Street2") + "<br />" %>' Visible='<%# Convert.IsDBNull(Eval("Street2")) ? false : true %>' />
                            <asp:Label ID="lblAddressStreet3" runat="server" Text='<%# Eval("Street3") + "<br />" %>' Visible='<%# Convert.IsDBNull(Eval("Street3")) ? false : true %>' />
                            <asp:Label ID="lblAddressCity" runat="server" Text='<%# Eval("City") %>' />, <asp:Label ID="lblAddressProvince" runat="server" Text='<%# Eval("Province") %>' />&nbsp;&nbsp;<asp:Label ID="lblAddressPostalCode" runat="server" Text='<%# Eval("PostalCode") %>' /><br />
                            <asp:Label ID="lblAddressCountry" runat="server" Text='<%# Eval("Country") + "<br />" %>' Visible='<%# (Eval("Country", "{0}") == "Canada") ? false : true %>' />
                            <table border="0">
                                <asp:Label ID="lblAddressPhone" runat="server" Text='<%# "<tr><td width=50>Phone:</td><td>" + Eval("Phone") + "</td></tr>" %>' Visible='<%#Convert.IsDBNull(Eval("Phone")) ? false : true %>' />
                                <asp:Label ID="lblAddressFax" runat="server" Text='<%# "<tr><td width=50>Fax:</td><td>" + Eval("Fax") + "</td></tr>" %>' Visible='<%#Convert.IsDBNull(Eval("Fax")) ? false : true %>' />
                                <asp:PlaceHolder ID="cphEmailAddress" runat="server" Visible='<%# Convert.IsDBNull(Eval("Email")) ? false : true %>'><tr><td width="50">Email:</td><td><asp:LinkButton ID="lnkEmailValidate" runat="server" Text='<%# Eval("ShortEmail") %>' OnClick="ShowReCAPTCHA" /></td></tr></asp:PlaceHolder>
                                <asp:PlaceHolder ID="cphEmail" runat="server" Visible="false"><tr><td width="50">Email:</td><td><asp:HyperLink ID="lnkEmail" runat="server" NavigateUrl='<%# Eval("Email", "mailto:{0}") %>' Text='<%# Eval("Email") %>' /></td></tr></asp:PlaceHolder>
                             </table>
                             <asp:PlaceHolder ID="cphCaptcha" runat="server" Visible="false">
                                   <br />
                                    <div class="info">To view the full email address, please type the moving characters in the box below.</div>
                    <nu:NuCaptchaControl ID="nucaptcha" runat="server" ClientKey="LEAP|0|4|TYPE|9|CLIENTKEY|CID|4|9942|KID|4|9884|SKEY|32|bDdiOWgwdjhtNy1MdTRENG43Q1BZdyws" />

                             </asp:PlaceHolder>
                        </td>
                    </tr>
                </table>
                <br />

            </itemtemplate>
        </asp:Repeater>
        <br />
        <br />
        <asp:LinkButton ID="lnkDetailsBack" CssClass="navButtonLarge" runat="server" OnClick="lnkDetailsBack_Click">Back to Search Results</asp:LinkButton>
        <asp:LinkButton ID="lnkDetailsNewSearch" runat="server" CssClass="navButtonLarge" OnClick="lnkNewSearch_Click">New Search</asp:LinkButton>
        <asp:SqlDataSource ID="dsDetails" runat="server"
            ConnectionString="<%$ ConnectionStrings:MSCRM %>"
            SelectCommand="
                        SELECT * from some table
            ">
            <selectparameters>
                    <asp:Parameter DbType="Guid" Name="ContactID" />
                </selectparameters>
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="dsSpecialty" runat="server"
            ConnectionString="<%$ ConnectionStrings:MSCRM %>"
            SelectCommand="
                        SELECT * from some table 
            ">
            <selectparameters>
                    <asp:Parameter DbType="Guid" Name="ContactID" />
                </selectparameters>
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="dsAddresses" runat="server"
            ConnectionString="<%$ ConnectionStrings:xxx %>"
            SelectCommand="
                        SELECT * from some table 
            ">
            <selectparameters>
                    <asp:Parameter DbType="Guid" Name="ContactID" />
                </selectparameters>
        </asp:SqlDataSource>
    </asp:Panel>

    <!--//////////// Begin Data Sources ////////////-->

</asp:Content>

您可能希望在visual studio的属性窗口中检查c#文件的
生成操作
,并确保其设置为
编译

您可能希望在visual studio的属性窗口中检查c#文件的
生成操作
,并确保其设置为
编译

检查这是否为错误web应用程序项目或网站项目。网站项目将使用@Page指令的CodeFile属性,但web应用程序项目不会。如果它试图编译为web应用程序项目,您将收到这些错误,因为web应用程序项目除了.aspx和.aspx.cs文件之外还需要一个设计器文件。设计器包含所有控件定义,从而允许您在codebehind中正确引用它们(web应用程序使用codebehind,而不是CodeFile属性)

检查这是web应用程序项目还是网站项目。网站项目将使用@Page指令的CodeFile属性,但web应用程序项目不会。如果它试图编译为web应用程序项目,您将收到这些错误,因为web应用程序项目除了.aspx和.aspx.cs文件之外还需要一个设计器文件。设计器包含所有控件定义,从而允许您在codebehind中正确引用它们(web应用程序使用codebehind,而不是CodeFile属性)

在出现错误的页面上单击鼠标右键,然后单击“转换为web应用程序…”。。。这将解决您的错误。

右键单击出现错误的页面,然后单击“转换为web应用程序…”。。。这将解决您的错误。

这里需要检查两件事: 1.您希望在aspx.cs中访问的每个控件都应具有runat=“server” 2.添加上述标记后生成您的解决方案
3.如果您希望访问在repeater的项目模板中定义的控件,则只能在repeater事件中访问,方法是放置一个读取repeater的所有项目的循环,此处要检查以下几项: 1.您希望在aspx.cs中访问的每个控件都应具有runat=“server” 2.添加上述标记后生成您的解决方案
3.如果您希望访问在repeater的项目模板中定义的控件,则只能在repeater事件中进行访问,方法是放置一个循环,读取repeater的所有项目

谢谢大家的回答,我确实尝试了其中一些方法

  • 您希望在aspx.cs中访问的每个控件都应具有runat=“server”
  • 是的

  • 添加上述标记后生成您的解决方案

  • 如果希望访问在repeater的项目模板中定义的控件,请 只能在中继器事件内通过放置循环读数来执行此操作 中继器的所有项目

  • 是的


    右键单击出现错误的页面,然后单击 转换为web应用程序。。。那会解决你的错误

    在我的IDE中没有这样的选项,而且我认为它将是整个项目,而不是我转换的页面


    检查这是一个web应用程序项目还是一个网站 项目网站项目将使用 @页面指令,但web应用程序项目不会。如果是 尝试编译为web应用程序项目时,您将收到 这些错误是因为web应用程序项目需要设计器文件 除了.aspx和.aspx.cs文件之外。设计器包含所有 控件定义,该控件定义允许您引用 在codebehind中正确使用它们(web应用程序使用codebehind而不是 代码文件属性)

    显然,我的项目是一个网站,而不是一个web应用程序,因为它包含codefile属性。而且,我没有设计器文件,所以这很有意义


    事实证明,我正在尝试编辑一个在VS2008中开发的解决方案,使用VS2013,从那时起,已经发生了很多变化。虽然问题在这里没有得到解决,但解决方案是创建一个新的VS2013解决方案并导入文件,现在一切正常,谢谢。

    谢谢大家的回答,我确实尝试了其中一些方法

  • 您希望在aspx.cs中访问的每个控件都应具有runat=“server”
  • 是的

  • 添加上述标记后生成您的解决方案

  • 如果希望访问在repeater的项目模板中定义的控件,请 只能在中继器事件内通过放置循环读数来执行此操作 中继器的所有项目

  • 是的


    右键单击出现错误的页面,然后单击 转换为web应用程序。。。那会解决你的错误

    在我的IDE中没有这样的选项,而且我认为它将是整个项目,而不是我转换的页面

    using System;
    using System.Data;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class directory_Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack && pnlDetails.Visible == true && rpAddresses.Items.Count > 0 && ((PlaceHolder)rpAddresses.Items[0].FindControl("cphCaptcha")).Visible == true)
            {
                Page.Validate();
                if (Page.IsValid)
                {
                    ((PlaceHolder)rpAddresses.Items[0].FindControl("cphCaptcha")).Visible = false;
                    ((PlaceHolder)rpAddresses.Items[0].FindControl("cphEmailAddress")).Visible = false;
                    ((PlaceHolder)rpAddresses.Items[0].FindControl("cphEmail")).Visible = true;
                }
            }
        }
    
        protected void rpAddresses_DataBound(object sender, EventArgs e)
        {
        }
    
        protected void lnkSearch_Click(object sender, EventArgs e)
        {
            //lvResults.DataBind();
            DataPager1.SetPageProperties(0, DataPager1.PageSize, true);
            ShowResults();
        }
    
        protected void ShowResults()
        {
            pnlSearchbox.Visible = false;
            pnlResults.Visible = true;
            pnlDetails.Visible = false;
        }
    
        protected void lnkNewSearch_Click(object sender, EventArgs e)
        {
            pnlSearchbox.Visible = true;
            pnlResults.Visible = false;
            pnlDetails.Visible = false;
        }
    
        protected void lnkDetails_Click(object sender, CommandEventArgs e)
        {
            dsDetails.SelectParameters["ContactID"].DefaultValue = e.CommandArgument.ToString();
            dsSpecialty.SelectParameters["ContactID"].DefaultValue = e.CommandArgument.ToString();
            dsAddresses.SelectParameters["ContactID"].DefaultValue = e.CommandArgument.ToString();
            rpAddresses.DataBind();
            if (rpAddresses.Items.Count == 0)
            {
                rpAddresses.Visible = false;
            }
            else
            {
                rpAddresses.Visible = true;
            }
            pnlSearchbox.Visible = false;
            pnlResults.Visible = false;
            pnlDetails.Visible = true;
        }
    
        protected void lnkDetailsBack_Click(object sender, EventArgs e)
        {
            ShowResults();
        }
    
        protected void dsSearchResults_Selected(object sender, SqlDataSourceStatusEventArgs e)
        {
            lblCount.Text = String.Format("{0} Dentists found", e.AffectedRows);
        }
    
        protected void ShowReCAPTCHA(object sender, EventArgs e)
        {
            ((PlaceHolder)rpAddresses.Items[0].FindControl("cphCaptcha")).Visible = true;
        }
    }