“control”这个名称在当前上下文中不存在

时间:2014-10-15 00:37:18

标签: c# asp.net webforms servercontrols

我在我正在继续工作的网站上遇到错误,从存储库中获取源代码并构建,然后清除了一些引用错误,我仍然遇到了1000多个这样的实例错误:

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

这似乎表明,引用服务器端的控件未在页面上声明,或者没有runat = server,但事实上它们确实如此。它也可能是继承属性不匹配的问题,但它确实存在。我之前搜索过stackoverflow并看过这个问题,虽然在尝试了一些提到的解决方案后,他们没有帮助。我的网页没有任何设计器文件。下面是aspx和aspx.cs页面的一些代码片段。 (一些信息被修改以保护客户隐私)

我的问题是,为什么我不能在服务器端引用我的控件? 'paneldetails','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>

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

7 个答案:

答案 0 :(得分:3)

感谢人们的回答,我确实尝试了其中的一些。

  
      
  1. 您希望在aspx.cs中访问的每个控件都应该有runat =&#34; server&#34;
  2.   

他们做了

  
      
  1. 添加上述标记后构建解决方案

  2.   
  3. 如果您希望访问转发器项目模板中定义的控件   通过循环读取,只能在转发器事件中执行此操作   所有中继器项目

  4.   

他们是

  

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

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

  

检查这是一个Web应用程序项目还是一个网站   项目。一个网站项目将使用的CodeFile属性   @Page指令,但Web应用程序项目不会。如果是的话   尝试编译为Web应用程序项目,您会收到   这些错误是因为Web应用程序项目需要设计器文件   除了.aspx和.aspx.cs文件。设计师包含所有   控制定义,它们允许您参考   它们在代码隐藏中是正确的(Web应用程序使用CodeBehind而不是   CodeFile属性也是如此。

显然我的项目是一个网站,而不是一个Web应用程序,因为它包含了codefile属性。此外,我没有设计师档案,所以这是有道理的。

原来我正在尝试使用VS2013编辑在VS2008中开发的解决方案,从那以后发生了很多变化。虽然这里没有解决这个问题,但修复方法是创建一个新的VS2013解决方案并导入文件,它们现在都按预期工作了,谢谢。

答案 1 :(得分:2)

排除或删除引用相同代码隐藏文件的任何其他网页,例如您复制并粘贴的旧网页。

答案 2 :(得分:1)

您可能需要在visual studio的属性窗口中检查c#文件的build action,并确保将其设置为Compile

答案 3 :(得分:0)

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

答案 4 :(得分:0)

右键单击您收到错误的页面,然后单击转换为Web应用程序...这将解决您的错误。

答案 5 :(得分:0)

这里要检查的事情: 1.您希望在aspx.cs中访问的每个控件都应该有runat =“server” 2.添加上述标记后构建解决方案 3.如果您希望访问在转发器的项目模板中定义的控件,您只能在转发器事件内执行此操作,方法是通过循环读取所有转发器项目

答案 6 :(得分:0)

我有这个错误,但刚犯了一个愚蠢的错误。我想保留原始代码,同时我进行了一些重大更改,因此我复制并粘贴了一个.cs文件。好吧,两个文件都有相同的类名。两个相同的命名空间(可以理解)混淆了编译器。删除&#34;备份&#34;固定它。我本可以改变名称空间。

只是分享以防有人像我一样骨头。