2014-10-15 9 views
1

내가 작업하고있는 사이트에서 오류가 발생했습니다. 저장소 및 건물에서 소스를 가져 와서 몇 개를 지우고 나면 상속되었습니다. 참조 오류가 발생했습니다.이 오류의 1000 가지 인스턴스가 계속 발생합니다.'control'이름이 현재 컨텍스트에 존재하지 않습니다.

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

답변

3

답변 해 주셔서 감사합니다.

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

그들은 나는 그것이 전체 프로젝트가 아니라 내가 변환 페이지가 될 것이라고 생각 외에 그들이 내 IDE에서

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

그런 옵션이 있습니다

  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

을한다.

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 솔루션을 만들고 파일을 가져 오는 것이 었습니다. 모두 의도 한대로 작동합니다. 감사합니다.

1

당신은 Visual Studio에서 속성 창에서 C#을 파일의 build action을 확인하고 있는지의 설정을 할 수 있습니다 to Compile

0

웹 응용 프로그램 프로젝트 또는 웹 사이트 프로젝트인지 확인하십시오. 웹 사이트 프로젝트는 @Page 지시문의 CodeFile 속성을 사용하지만 웹 응용 프로그램 프로젝트는 사용하지 않습니다. 웹 응용 프로그램 프로젝트로 컴파일하려고하면 웹 응용 프로그램 프로젝트에 .aspx 및 .aspx.cs 파일 외에도 디자이너 파일이 필요하기 때문에 이러한 오류가 발생합니다. 디자이너에는 모든 제어 정의가 포함되어 있으므로 코드 정의에서 해당 참조를 제대로 참조 할 수 있습니다 (웹 응용 프로그램은 CodeBehind를 사용하지만 CodeFile 특성은 사용하지 않음).

0

오류가 발생한 페이지를 마우스 오른쪽 버튼으로 클릭하고 웹 응용 프로그램으로 변환 ...을 클릭하면 오류가 해결됩니다. 사물의

0

커플은 여기에 체크합니다 : 1. 당신이 aspx.cs에 액세스하고자하는 모든 컨트롤은 위의 태그 3. 원하는 경우를 추가 한 후 솔루션을 구축 2 RUNAT = "서버"를 가져야한다 중계기의 항목 템플릿에 정의 된 컨트롤에 액세스하려면 중계기의 모든 항목을 읽는 루프를 넣어서 중계기 이벤트 내부에서만 수행 할 수 있습니다.

1

동일한 코드 숨김 파일을 참조하는 다른 페이지 (예 : 복사하여 붙여 넣은 이전 페이지)를 제외하거나 삭제하십시오.

0

나는이 오류가 있었지만 어리석은 실수를 저질 렀습니다. .cs 파일 중 하나를 복사하여 붙여 넣기 위해 몇 가지 큰 변경 작업을 수행하는 동안 원래 코드를 유지하려고했습니다. 두 파일 모두 같은 클래스 이름을 가졌습니다. 두 개의 동일한 네임 스페이스 (당연히)는 컴파일러를 혼란스럽게 만들었습니다. "백업"을 제거하면 해결되었습니다. 이름 공간을 방금 변경했을 수도 있습니다.

사람이 나처럼 뼈가있는 경우를 대비하여 공유하십시오.

관련 문제