c# - 当前上下文中不存在名称 'control'

标签 c# asp.net webforms servercontrols

我在处理我继承的网站上的错误时遇到问题,从存储库中获取源代码并构建,然后清除一些引用错误,我仍然得到超过 1000 个这样的实例错误:

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

这似乎表明引用服务器端的控件未在页面上声明,或者其中没有 runat=server,但实际上它们有。也可能是 inherits 属性不匹配的问题,但确实如此。我已经搜索过 stackoverflow 并且之前看到过这个问题,尽管在尝试了提到的一些解决方案之后,他们没有帮助。我的页面没有任何设计器文件。下面是一些来自 aspx 和 aspx.cs 页面的代码片段。 (为保护客户隐私,对部分信息进行了编辑)

我的问题是,为什么我不能在服务器端引用我的控件? “paneldetails”、“rpAddresses”等?

默认.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>

默认.aspx.cs

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;
    }
}

最佳答案

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

  1. Every control which you wish to access in aspx.cs should have runat="server"

他们有

  1. Build your solution after adding the above tag

  2. If you wish to access the control defined inside the item template of repeater you can do so only inside repeater events for by putting a loop reading all items of repeater

他们是

Right click on the page where you are getting the error and click on convert to web application... That will solve your error.

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

Check to see if this is a web application project or a website project. A website project would use the CodeFile attribute of the @Page directive, but a web application project wouldn't. If it's trying to compile as a web application project, you would receive these errors because a web application project expects a designer file in addition to the .aspx and .aspx.cs files. The designer contains all the control definitions which in turn which allows you to reference them properly in codebehind (web application uses CodeBehind and not CodeFile attribute as well).

显然我的项目是一个网站,而不是一个网络应用程序,因为它包含代码文件属性。另外,我没有设计师文件,所以这是有道理的。

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

关于c# - 当前上下文中不存在名称 'control',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26372644/

相关文章:

C# 编程作业

C#字符串转数字,Parse失败时TryParse返回true

c# - 使用命名空间处理 C# XML 反序列化

javascript - 使用WebClient类返回图像数据并在标签中渲染图像

.NET - 获取协议(protocol)、主机和端口

c# - 池存在后更新 Azure Batch 自动缩放公式

javascript - 基本 Ajax POST 发送值在 Controller 中到达 null

c# - 对 ViewState/IPostback 与持久文本框值感到困惑

javascript - html/javascript 自动从提交按钮获取链接(也许用 python 自动化?)

asp.net - 编写 WebForms 或 MVC 以外的 ASP.NET 框架?