Asp.net элементы управления недоступны в исходном коде

#c# #asp.net

#c# #asp.net

Вопрос:

У меня есть проект, который ранее был создан кем-то другим. Когда я пытаюсь добавить новый элемент управления на страницу, я не могу получить к нему доступ в исходном коде. Когда я пытаюсь получить к нему доступ, появляется сообщение об ошибке, что элемент управления не определен в текущем контексте.

 <%@ Page Language="C#" MasterPageFile="~/HRMS.Master" AutoEventWireup="true"     CodeBehind="manageEmployee.aspx.cs" Inherits="HRMS.manageEmployee" Title="Untitled Page" %>

<%@ Register Assembly="eWorld.UI" Namespace="eWorld.UI" TagPrefix="ew" %>
<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="cc1" %>


<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <script type="text/javascript">
    document.getElementById("employee").setAttribute("class", "selected");
    </script>
<!--OPEN CONTENT DIV-->

     <asp:ScriptManager ID="ScriptManager1" runat="server">
     </asp:ScriptManager>
    <!-- Only this area is updated on PostBack -->

<div class="manage_employ">

    <ul>
        <li style="margin-top:10px; margin-bottom:15px"><input type="image" src="images/img_manageEmployee01.png"/></li>
    </ul>

    <ul>
        <li>First name</li>
        <li><asp:TextBox runat="server" class="text_input" id="txtFirstName"/></li>
        <asp:RequiredFieldValidator ID="validatorFirstName" runat="server" ErrorMessage="*" ControlToValidate="txtFirstName"></asp:RequiredFieldValidator>
        <li>Last name</li>
        <li><asp:TextBox runat="server" class="text_input" id="txtLastName"/></li>
        <asp:RequiredFieldValidator ID="validatorLastname" runat="server" ErrorMessage="*" ControlToValidate="txtLastName"></asp:RequiredFieldValidator>
    </ul>

    <ul>
        <li>CNIC</li>
        <li><asp:TextBox runat="server" class="text_input" id="txtCNIC"/></li>
        <asp:RequiredFieldValidator ID="validatorCNIC" runat="server" ErrorMessage="*" ControlToValidate="txtCNIC"></asp:RequiredFieldValidator>
        <li>Blood Group</li>
        <li><asp:DropDownList runat="server" class="text_input" id="ddlBloodGroup">
        <asp:ListItem>A </asp:ListItem>
        <asp:ListItem>B </asp:ListItem>
        <asp:ListItem>AB </asp:ListItem>
        <asp:ListItem>A-</asp:ListItem>
        <asp:ListItem>B-</asp:ListItem>
        <asp:ListItem>AB-</asp:ListItem>
        <asp:ListItem>O </asp:ListItem>
        <asp:ListItem>O-</asp:ListItem>
        </asp:DropDownList>
        </li>
    </ul>

    <ul>
        <li>Mobile</li>
        <li><asp:TextBox runat="server" class="text_input" id="txtMobile"/></li>
        <asp:RequiredFieldValidator ID="validatorMobile" runat="server" ErrorMessage="*" ControlToValidate="txtMobile"></asp:RequiredFieldValidator>
        <li>Phone</li>
        <li><asp:TextBox runat="server" class="text_input" id="txtPhone"/></li>
    </ul>

    <ul>


    </ul>

    <ul>
        <li>E-Mail</li>
        <li><asp:TextBox runat="server" class="text_input" id="txtEmail"/></li>
        <asp:RegularExpressionValidator ID="valEmail" ControlToValidate="txtEmail" runat="server" ErrorMessage="*" ValidationExpression="w ([- .']w )*@w ([-.]w )*.w ([-.]w )*">*</asp:RegularExpressionValidator>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
            <li>Maritial Status</li>
            <li>
            <asp:RadioButton ID="rbtnMarried" AutoPostBack="true" runat="server" oncheckedchanged="rbtnMarried_CheckedChanged"/>Married
            <asp:RadioButton ID="rbtnUnmarried" AutoPostBack="true" runat="server" 
                    oncheckedchanged="rbtnUnmarried_CheckedChanged"/>Unmarried
            </li>
            </ContentTemplate>
        </asp:UpdatePanel>
    </ul>

    <ul>
        <li>Permanant Address</li>
        <li><asp:TextBox runat="server" class="text_input" id="txtPermanantAddress"/></li>
        <asp:RequiredFieldValidator ID="validatorPAddress" runat="server" ErrorMessage="*" ControlToValidate="txtPermanantAddress"></asp:RequiredFieldValidator>
        <li>Temporary Address</li>
        <li><asp:TextBox runat="server" class="text_input" id="txtTemporaryAddress"/></li>
        <asp:RequiredFieldValidator ID="validatorTAddress" runat="server" ErrorMessage="*" ControlToValidate="txtTemporaryAddress"></asp:RequiredFieldValidator>
    </ul>


    <ul>
        <li>Salary</li>
        <li><asp:TextBox runat="server" class="text_input" id="txtSalary"/></li>
        <asp:RequiredFieldValidator ID="validatorSalary" runat="server" ErrorMessage="*" ControlToValidate="txtSalary"></asp:RequiredFieldValidator>
        <li>Joining Date</li>

             <li>
        <%--<ew:calendarpopup ID="calJoiningDate" runat="server"></ew:calendarpopup>--%>
                  <asp:TextBox ID="CalJoiningDate1" runat="server" CssClass="text_input"></asp:TextBox>
                  <cc1:CalendarExtender ID="CalJoiningDate1_CalendarExtender" runat="server" 
                       Enabled="True" TargetControlID="CalJoiningDate1">
                  </cc1:CalendarExtender>
        </li>


    </ul>
    <ul>
        <li>Job Area</li>
        <li><asp:DropDownList runat="server" class="text_input" id="ddlJobArea"/></li>
        <li>Desigantion</li>
        <li><asp:DropDownList runat="server" class="text_input" id="ddlDesignation"/></li>
    </ul>

    <asp:UpdatePanel ID="updatePnl" runat="server">
    <ContentTemplate>    
    <div>
    <ul>
        <li style="margin-top:20px; margin-bottom:15px"><input type="image" src="images/img_jobHistory.png"  /></li>
    </ul>

    <ul>
    <li>Company</li>
   <%--<asp:DropDownList runat="server" class="text_input" id="ddlCompany" 
              onselectedindexchanged="ddlCompany_SelectedIndexChanged"/>--%>
          <li><asp:TextBox ID="CompanyNames" runat="server" CssClass="text_input"></asp:TextBox> 
               <cc1:AutoCompleteExtender ID="CompanyNames_AutoCompleteExtender" runat="server" 
                    DelimiterCharacters="" Enabled="True" ServicePath="getCompanies.asmx" ServiceMethod="getCompaniesMethod" MinimumPrefixLength="1" 
                    TargetControlID="CompanyNames" UseContextKey="True">
               </cc1:AutoCompleteExtender>
               <li>Job Duration</li>
               <li>
                    <asp:TextBox ID="txtJobDuration" runat="server" class="text_input" />
               </li>
               <asp:RequiredFieldValidator ID="validatorJobDuration" runat="server" 
                    ControlToValidate="txtJobDuration" ErrorMessage="*" 
                    ValidationGroup="jobHistory"></asp:RequiredFieldValidator>
         </li>
    </ul>

    <ul>
    <li>Job Area</li>
    <li><asp:DropDownList runat="server" class="text_input" id="ddlJobHistJobArea"/></li>
    <li>Designation</li>
    <li><asp:DropDownList runat="server" class="text_input" id="ddlJobHistoryDesignation"/></li>
    </ul>

    <ul>
    <li>Last Drawn Salary</li>
    <li><asp:TextBox runat="server" class="text_input" id="txtLastDrawnSalary"/>
         </li>
        <asp:RequiredFieldValidator ID="validatorLastDrawnSalary" runat="server" ValidationGroup="jobHistory" ErrorMessage="*" ControlToValidate="txtLastDrawnSalary"></asp:RequiredFieldValidator>
    </ul>

    <ul>
        <li style="margin-left:160px">
            <asp:ImageButton src="images/btn_Add.png" runat="server" ID="btnAddJobHistory" onclick="btnAddJobHistory_Click" CausesValidation="True" ValidationGroup="jobHistory"/>
            <asp:ImageButton src="images/btnReset.png" runat="server" ID="btnResetJH" CausesValidation="False" onclick="btnResetJH_Click"/>
        </li>
    </ul>

    <ul style="margin-left:30px">
    <asp:GridView ID="grdJobHistory" runat="server" AutoGenerateColumns="False" Width="798px" 
            AllowPaging="True" 
        onpageindexchanging="grdJobHistory_PageIndexChanging" 
        onrowcommand="grdJobHistory_RowCommand" 
            onrowdeleting="grdJobHistory_RowDeleting" 
            onrowediting="grdJobHistory_RowEditing" Font-Bold="True" 
            Font-Names="Calibri" Font-Size="Medium" ForeColor="White" PageSize="5">
            <Columns>
                <asp:BoundField DataField="EmployeeExperianceId" 
                    HeaderText="EmployeeExperianceId" />
                <asp:BoundField HeaderText="Company" DataField="CompanyName" ReadOnly="True" >
                    <ItemStyle Font-Names="Calibri,Verdana,Arial,Helvetica,sans-serif" 
                        Font-Size="Small" ForeColor="#3F4A53" />
                </asp:BoundField>
                <asp:BoundField DataField="JobAreaName" HeaderText="Job Area" >
                    <ItemStyle Font-Names="Calibri,Verdana,Arial,Helvetica,sans-serif" 
                        Font-Size="Smaller" ForeColor="#3F4A53" />
                </asp:BoundField>
                <asp:BoundField HeaderText="Designation" DataField="DesignationName" 
                    ReadOnly="True" >
                    <ItemStyle Font-Names="Calibri,Verdana,Arial,Helvetica,sans-serif" 
                        Font-Size="Small" ForeColor="#3F4A53" />
                </asp:BoundField>
                <asp:BoundField HeaderText="Experiance Duration" DataField="ExperianceDuration" 
                    ReadOnly="True" >
                    <ItemStyle Font-Names="Calibri,Verdana,Arial,Helvetica,sans-serif" 
                        Font-Size="Small" ForeColor="#3F4A53" />
                </asp:BoundField>
                <asp:BoundField HeaderText="Salary" DataField="LastDrawnSalary" ReadOnly="True" >
                    <ItemStyle Font-Names="Calibri,Verdana,Arial,Helvetica,sans-serif" 
                        Font-Size="Small" ForeColor="#3F4A53" />
                </asp:BoundField>
                <asp:TemplateField AccessibleHeaderText="Edit" HeaderText="Edit">
                    <ItemTemplate>
                        <asp:ImageButton ID="imgBtnEdit" runat="server" ImageUrl="images/updateIcon.png" CausesValidation="False" CommandName="Edit" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "EmployeeExperianceId") %>'/>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField AccessibleHeaderText="Delete" HeaderText="Delete">
                    <ItemTemplate>
                        <asp:ImageButton ID="imgBtnDelete" runat="server" ImageUrl="images/deleteIcon.png" CausesValidation="False" CommandName="Delete" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "EmployeeExperianceId") %>' OnClientClick="return confirm('Are you sure you want to delete this record...');"/>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <HeaderStyle BackColor="#5D92B9" BorderStyle="None" />
            <AlternatingRowStyle BackColor="#AAAAAA" />
        </asp:GridView>
    </ul>

    </div>

    <div>
    <ul>
        <li style="margin-top:20px; margin-bottom:15px"><input type="image" src="images/img_skillDetail.png"  /></li>
    </ul>

    <ul>
        <li>Skill</li>
        <!--<li><asp:DropDownList runat="server" class="text_input" id="ddlSkill"/></li>-->
        <li>
             <asp:TextBox ID="SkillAutoComplete" runat="server" CssClass="text_input"></asp:TextBox>
             <cc1:AutoCompleteExtender ID="SkillAutoComplete_AutoCompleteExtender" 
                  runat="server" DelimiterCharacters="" Enabled="True" ServicePath="getSkills.asmx" ServiceMethod="getAllSkills" MinimumPrefixLength="1" 
                  TargetControlID="SkillAutoComplete">
             </cc1:AutoCompleteExtender>
         </li>
        <li>Skill Detail</li>
        <li><asp:TextBox runat="server" class="text_input" id="txtSkillDetail"/></li>
        <asp:RequiredFieldValidator ID="validatorSkillDetail" runat="server" ValidationGroup="skill" ErrorMessage="*" ControlToValidate="txtSkillDetail"></asp:RequiredFieldValidator>
    </ul>    

    <ul>
        <li style="margin-left:160px">
            <asp:ImageButton src="images/btn_Add.png" runat="server" ID="btnAddSkill" CausesValidation="True" ValidationGroup="skill" onclick="btnAddSkill_Click"/>
            <asp:ImageButton src="images/btnReset.png" runat="server" ID="btnResetSkill" CausesValidation="False" onclick="btnResetSkill_Click"/>
        </li>
    </ul>    

    <ul style="margin-left:30px">
    <asp:GridView ID="grdSkill" runat="server" AutoGenerateColumns="False" Width="798px" 
            AllowPaging="True" 
        onpageindexchanging="grdSkill_PageIndexChanging" 
        onrowcommand="grdSkill_RowCommand" 
            onrowdeleting="grdSkill_RowDeleting" 
            onrowediting="grdSkill_RowEditing" Font-Bold="True" 
            Font-Names="Calibri" Font-Size="Medium" ForeColor="White" PageSize="5">
            <Columns>
                <asp:BoundField HeaderText="EmployeeSkillId" DataField="EmployeeSkillId" >
                </asp:BoundField>
                <asp:BoundField DataField="SkillName" HeaderText="Skill Name" ReadOnly="True">
                    <ItemStyle Font-Names="Calibri,Verdana,Arial,Helvetica,sans-serif" 
                        Font-Size="Small" ForeColor="#3F4A53" />
                </asp:BoundField>
                <asp:BoundField HeaderText="Skill Detail" DataField="SkillDetail" 
                    ReadOnly="True" >
                    <ItemStyle Font-Names="Calibri,Verdana,Arial,Helvetica,sans-serif" 
                        Font-Size="Small" ForeColor="#3F4A53" />
                </asp:BoundField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:ImageButton ID="imgBtnEdit" runat="server" ImageUrl="images/updateIcon.png" CausesValidation="false" CommandName="Edit" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "EmployeeSkillId") %>'/>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:ImageButton ID="imgBtnDelete" runat="server" ImageUrl="images/deleteIcon.png" CommandName="Delete" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "EmployeeSkillId") %>' OnClientClick="return confirm('Are you sure you want to delete this record...');"/>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <HeaderStyle BackColor="#5D92B9" BorderStyle="None" />
            <AlternatingRowStyle BackColor="#AAAAAA" />
        </asp:GridView>
    </ul>
    </div>

    <div>       
    <ul>
        <li style="margin-top:20px; margin-left:20px; margin-bottom:15px"><input type="image" src="images/img_qualificationDetail.png"  /></li>
    </ul>    

    <ul>
        <li>Course</li>
        <li><asp:DropDownList runat="server" class="text_input" id="ddlCourse"/></li>
        <li>Institution</li>
        <li><asp:TextBox runat="server" class="text_input" id="txtInstitution"/></li>
        <asp:RequiredFieldValidator ID="validatorInsitution" runat="server" ValidationGroup="course" ErrorMessage="*" ControlToValidate="txtInstitution"></asp:RequiredFieldValidator>
    </ul>        

    <ul>
        <li>Duration</li>
        <li><asp:TextBox runat="server" class="text_input" id="txtCourseDuration"/></li>
        <asp:RequiredFieldValidator ID="validatorDuration" runat="server" ValidationGroup="course" ErrorMessage="*" ControlToValidate="txtCourseDuration"></asp:RequiredFieldValidator>
        <li>Passing Year</li>
        <li>
             <asp:TextBox ID="calPassingYear1" runat="server" CssClass="text_input"></asp:TextBox>

        </li>
        <!--<li><ew:CalendarPopup ID="calPassingYear" runat="server"></ew:CalendarPopup></li>-->
    </ul>        

    <ul>
        <li>Marks/Percentage/GPA</li>
        <li><asp:TextBox runat="server" class="text_input" id="txtMarksPercentage"/></li>
        <asp:RequiredFieldValidator ID="validatorMarks" runat="server" ValidationGroup="course" ErrorMessage="*" ControlToValidate="txtMarksPercentage"></asp:RequiredFieldValidator>
        <li style="margin-left:160px">
        <asp:ImageButton src="images/btn_Add.png" runat="server" ID="btnAddCourse" CausesValidation="True" onclick="btnAddCourse_Click" ValidationGroup="course"/>
        <asp:ImageButton src="images/btnReset.png" runat="server" ID="btnResetCourse" CausesValidation="False" onclick="btnResetCourse_Click" />
        </li>
    </ul>        

    <ul style="margin-left:30px">
    <asp:GridView ID="grdCourse" runat="server" AutoGenerateColumns="False" Width="798px" 
            AllowPaging="True" 
        onpageindexchanging="grdCourse_PageIndexChanging" 
        onrowcommand="grdCourse_RowCommand" 
            onrowdeleting="grdCourse_RowDeleting" 
            onrowediting="grdCourse_RowEditing" Font-Bold="True" 
            Font-Names="Calibri" Font-Size="Medium" ForeColor="White" PageSize="5">
            <Columns>
                <asp:BoundField DataField="EmployeeQualificationId" 
                    HeaderText="EmployeeQualificationId" />
                <asp:BoundField HeaderText="Course" DataField="CourseTitle" ReadOnly="True" >
                    <ItemStyle Font-Names="Calibri,Verdana,Arial,Helvetica,sans-serif" 
                        Font-Size="Small" ForeColor="#3F4A53" />
                </asp:BoundField>
                <asp:BoundField HeaderText="Institution" DataField="InstitutionName" 
                    ReadOnly="True" >
                    <ItemStyle Font-Names="Calibri,Verdana,Arial,Helvetica,sans-serif" 
                        Font-Size="Small" ForeColor="#3F4A53" />
                </asp:BoundField>
                <asp:BoundField HeaderText="Duration" DataField="Duration" 
                    ReadOnly="True" >
                    <ItemStyle Font-Names="Calibri,Verdana,Arial,Helvetica,sans-serif" 
                        Font-Size="Small" ForeColor="#3F4A53" />
                </asp:BoundField>
                <asp:BoundField HeaderText="Passing Year" DataField="YearOfPassing" 
                    ReadOnly="True" >
                    <ItemStyle Font-Names="Calibri,Verdana,Arial,Helvetica,sans-serif" 
                        Font-Size="Small" ForeColor="#3F4A53" />
                </asp:BoundField>
                <asp:BoundField HeaderText="Marks/Percentage/GPA" DataField="MarksPercentage" 
                    ReadOnly="True" >
                    <ItemStyle Font-Names="Calibri,Verdana,Arial,Helvetica,sans-serif" 
                        Font-Size="Small" ForeColor="#3F4A53" />
                </asp:BoundField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:ImageButton ID="imgBtnEdit" runat="server" ImageUrl="images/updateIcon.png" CausesValidation="false" CommandName="Edit" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "EmployeeQualificationId") %>'/>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:ImageButton ID="imgBtnDelete" runat="server" ImageUrl="images/deleteIcon.png" CommandName="Delete" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "EmployeeQualificationId") %>' OnClientClick="return confirm('Are you sure you want to delete this record...');"/>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <HeaderStyle BackColor="#5D92B9" BorderStyle="None" />
            <AlternatingRowStyle BackColor="#AAAAAA" />
        </asp:GridView>
    </ul>
    </div>
    </ContentTemplate>
      </asp:UpdatePanel>        
    <ul>
       <li style="margin-left:90px; margin-bottom:10px;">
       <asp:ImageButton ID="btnSubmit" AlternateText="submit button" runat="server" src="images/btn_Submit.png" onclick="btnSubmit_Click"/>
       </li>
    </ul>
</div>
            <!--CLOSE CONTENT DIV-->

</asp:Content>
  

Например:

Когда я пытался добавить некоторые ASP.NET элементы управления на стороне сервера, подобные <asp:testBox id="txtBox" runat="server"/> , были недоступны в исходном коде.:

Ошибка: txtBox не определен в текущем контексте…

Что я делаю не так?

Комментарии:

1. Вы добавили runat="server" в определение элемента управления?

2. мой вопрос был очень простым, я просто говорю, что мои новые элементы управления, которые я добавляю на свою страницу, недоступны в исходном коде …… есть ли что-то, что вам трудно понять?

3. Например: когда я пытался добавить некоторые asp.net элементы управления на стороне сервера, такие как ‘code’ <asp: TestBox id=»txtBox» runat=»server»/> недоступны в исходном коде, означают txtBox.текстовая ошибка txtBox не определен в текущем контексте…

4. В настоящее время у меня та же проблема: я ссылаюсь на пользовательский элемент управления внутри разметки aspx страницы (с тегами ID и runat). Из исходного кода пользовательский элемент управления не распознается как элемент страницы, ПОКА я не изменю идентификатор пользовательского элемента управления. Странное поведение, которое я еще не исправил.

Ответ №1:

У меня возникла эта проблема, когда я перенес веб-сайт в основное решение, создав asp.net проект приложения в решении и копирование файлов aspx и aspx.cs поверх. Я решил это, щелкнув правой кнопкой мыши по проекту и преобразовав его в веб-приложение. Это создало необходимые файлы designer.cs, которые содержат код для объектов asp на странице aspx.

Комментарии:

1. Преобразование в веб-приложение скрыто в меню проекта, у меня это сработало

2. Действительно странно иметь повторяющуюся проблему 6 лет спустя, решать ее самостоятельно, не осознавая этого, а затем натыкаться на свой собственный ответ SO, который помог бы вчера.

Ответ №2:

Это происходит особенно со старыми материалами в Visual Studio.

В версии 1.1 (до «частичных классов») вы всегда могли видеть объявления элементов управления в исходном коде.

В более поздних версиях они переместили это в файл cs.designer (так что теперь у вас есть частичные классы — часть в файле .cs.designer, а часть в файле .cs).

Если вы работаете с «проектом» visual studio, то вы можете открыть файл cs.designer и добавить свой элемент управления. Просто посмотрите, как объявлены все остальные элементы управления — это все, что вам нужно сделать.

Если вы работаете с «веб-сайтом» Visual Studio, то вам не повезло. Нет способа просмотреть или отредактировать файл cs.designer, потому что его нет до тех пор, пока веб-сайт не будет скомпилирован.

Ответ №3:

Убедитесь, что файл designer.cs для страницы включен в проект. Щелкните по нему правой кнопкой мыши и посмотрите, появится ли у вас опция «Включить в проект».

Комментарии:

1. Это сделало это! Я сделал копию проекта и добавил его в свое решение. Скопировано во всем содержимом, страницах и т.д. После того, как 1 включил каждый файл конструктора, все мои ошибки исчезли 🙂

Ответ №4:

Только что нашел этот вопрос, и я понимаю, что он довольно старый, но я думаю, что у меня есть потенциальный ответ. Ваш исходный код для частичного класса разработчика может быть не включен в проект — иногда это происходит, когда вы переименовали и / или скопировали файл.

Перейдите на свою страницу (назовем ее Test.aspx) и разверните ее дерево в обозревателе решений — видите ли вы файлы с именами Test.aspx.cs и Test.aspx.designer.cs? Если нет, найдите кнопку в верхней части обозревателя решений с пометкой «Показать все файлы». Щелкните по нему — если вы сейчас видите там файл .designer.cs, щелкните по нему правой кнопкой мыши и выберите «включить в проект». Это заставило меня снова начать после того, как я столкнулся с этой проблемой.

Ответ №5:

если вы не можете найти элемент управления на странице .cs, просто добавьте ссылку на элемент управления на странице designer.cs и попробуйте получить к нему доступ еще раз.

Я уверен, что это будет на 100%. это то, что я узнал

Комментарии:

1. Добро пожаловать в stackoverflow. Вы могли бы сделать свой ответ более полезным, добавив ссылки.

2. Отклонил этот ответ. Конечно, это устраняет проблему, но никогда не следует изменять код конструктора, как заявил @Omeed. Изменение может быть перезаписано, когда Visual Studio вносит изменения в файл.

Ответ №6:

Вы переименовали файл вашего проекта? Если они у вас есть, не забудьте переименовать наследуемые элементы в верхней части вашей ASPX-страницы.

Ответ №7:

Используйте CodeBehind атрибут вместо CodeFile атрибута тега страницы.

Например:

  <%@ Control Language="C#" AutoEventWireup="true" **CodeBehind**="Results.ascx.cs" Inherits="MyApp.Results" %>
  

Ответ №8:

Если вы столкнулись с этой проблемой в VS2013 на веб-сайте (в отличие от веб-приложения) и у вас есть несколько файлов aspx, совместно использующих codebehind, тогда вам нужно убедиться, что ВСЕ файлы aspx имеют точно такую же коллекцию элементов управления.

В предыдущих версиях Visual Studio это не было проблемой, но, похоже, VS2013 ужесточился.

Я надеюсь, что это кому-то поможет — я заметил это только благодаря комментарию Сергея выше.

Комментарии:

1. Это обычное дело при копировании страниц. Если вы скопируете страницу в VS, это создаст 2 новых файла (html и исходный код), но имена базовых классов не изменятся. Вам нужно будет изменить имя класса в файле code behind, параметр Inherits в файле aspx и параметр CodeFile в файле aspx.

Ответ №9:

Первый

  • Убедитесь, что вы присвоили элементу управления идентификатор

Если это не поможет

  • Закройте страницу, на которую вы добавили элемент управления
  • Перестройте / скомпилируйте проект и снова откройте страницу

Комментарии:

1. я сделал все, перестроил проект, очистил проект, но та же проблема — новые элементы управления недоступны в исходном коде

2. мой файл code behind имеет более 3000 символов, поэтому я не могу его загрузить

3. означает, что в моем файле code behind более 3000 слов, поэтому я не могу его загрузить

Ответ №10:

Это случилось со мной в проекте веб-сайта в VS2010, но поскольку я являюсь частью более крупной команды, у меня нет возможности конвертировать в веб-приложение, как предложил Доминик.

Оказывается, это было потому, что я переключил свой редактор по умолчанию для ASPX-файлов на «HTML Editor» вместо «Web Form Editor». Я сделал это, потому что intellisense отключал мой компьютер всякий раз, когда я открывал ASPX-файл. Когда я щелкнул правой кнопкой мыши на этой странице, чтобы «Открыть с помощью …» в «Редакторе веб-форм», и снова добавил элементы управления, это сработало отлично, и теперь они доступны в файле code behind.

Ответ №11:

Добавьте пустой файл .aspx.designer.cs в свой проект

Чтобы в Visual Studio можно было автоматически создавать объявления элементов управления страницей .aspx, вы можете добавить пустой YourWebPageName.aspx.designer.cs -файл в свой проект.

Если они добавлены в проект извне, вы можете добавить их в свой проект, щелкнув правой кнопкой мыши проект, выбрав новый элемент и включив новый файл .cs в свой проект.

Затем, как только вы внесете незначительные изменения в свою страницу YourWebPageName в редакторе дизайна, Visual Studio заполнит ваш пустой файл .cs объявлениями.

Ответ №12:

Вот список устранения неполадок, через которые я прохожу, когда сталкиваюсь с подобными проблемами.

  1. Убедитесь, что идентификаторы, которые вы привязываете к использованию в исходном коде, действительно объявлены в разметке
  2. Убедитесь, что у этих элементов есть ‘runat=»server»‘
  3. Если у вас возникли проблемы с определенным элементом управления, попробуйте создать его в верхней части страницы, если и это не сработает, это проблема генерации кода

Если ваша проблема связана с 3., временно удалите разметку элементов управления и любые ссылки, которые у вас были на них в исходном коде, т. Е. сделайте это так, чтобы вы могли успешно выполнять сборку. Закройте файл designer.cs, если он у вас открыт, и выполните перестройку. После чего попробуйте повторно добавить базовый элемент управления (следуя шагам 1 и 2) и посмотрите, отображается ли он (он должен). Затем повторно добавьте свою разметку по мере необходимости, и вы должны обнаружить, что генерация кода снова работает.

Комментарии:

1. моя проблема все еще существует, элементы управления, которые были объявлены на странице ранее, доступны, но новые элементы управления недоступны

2. убедитесь, что у вас не открыт designer.cs и что ваше решение успешно создается без необходимых вам элементов управления. Я обнаружил, что как только я смогу снова успешно создать решение, я смогу снова добавлять элементы управления. Также, просто в качестве теста, удалите атрибут ‘class’, технически вы должны использовать ‘CssClass’ при добавлении стиля класса в asp: textbox, хотя я никогда не считал это проблемой.

3. это почти исправило проблему. Вместо этого я переместил элемент управления в начало страницы и проверил, могу ли я получить к нему доступ оттуда. На самом деле так и было. поэтому я шаг за шагом переместил элемент управления туда, где я этого хотел. пока я больше не мог получить к ним доступ из исходного кода. Оказывается, я использую RadPanelItem, и это каким-то образом нарушило объявление чего-либо внутри него. по крайней мере, теперь я знаю, в чем моя проблема.

Ответ №13:

вручную введите объявление в другом частичном классе

Комментарии:

1. вы имеете в виду объявить элементы управления в исходном коде file или создать другой класс, который предоставляет реализацию Partial class еще раз, если нет, пожалуйста, объясните это

2. например. у вас есть asp: RequiredFieldValidator в приведенном выше коде, если вы попытаетесь найти его объявление в файле codebehind, где вы написали свои собственные функции, вы не найдете его объявление в этом файле. на самом деле с этим будет другой частичный класс. вы можете найти это в обозревателе решений. если вы откроете его, вы сможете найти этот файл. google «частичные классы в asp.net »

Ответ №14:

У меня была такая же проблема, когда 2 страницы ASP использовали один и тот же код в файле (это было ASP.NET Проект веб-сайта в Visual Studio 2013, а не ASP.NET Веб-приложение). Я решил проблему, изменив ее, чтобы использовать разные файлы Code Behind для каждой страницы.

Комментарии:

1. Если вы все еще хотите использовать один элемент управления в code behind, убедитесь, что элемент управления размещен во всех файлах конструктора, которые ссылаются на него.

Ответ №15:

Возможные причины:

  • несоответствие идентификаторов.
  • runat=»server» отсутствует в элементе управления в файле .aspx.

Решение, которое я нашел, помимо исправления вышеизложенного, заключается в перестройке проекта:

Еще одна вещь, о которой вам нужно позаботиться, это перед перестройкой закрыть файл конструктора.

Комментарии:

1. Проект Rebuild был исправлением для меня!

Ответ №16:

У меня была похожая проблема. Я столкнулся с этой проблемой, когда попытался переименовать aspx-файл. В моем случае имя класса не было обновлено с UpdateRecords на ModifyRecords, когда я переименовал aspx-файл в ModifyRecords. Следовательно, ни один из ASP.NET элементы управления были доступны из исходного кода.

Исходный код перед переименованием:

 public partial class UpdateRecords : System.Web.UI.Page
  

Оставшийся код после переименования:

 public partial class ModifyRecords : System.Web.UI.Page
  

Если вы попытаетесь переименовать aspx-файл или скопировать-вставить из другого файла, просто убедитесь, что имя класса обновлено.

Ответ №17:

Убедитесь, что атрибут codeBehind в директиве page ссылается на файл cs, в котором вы вызываете элемент управления

Ответ №18:

У меня та же проблема. Я нашел решение, удалив «PublicKeyToken=31bf3856ad364e35″ Пространство имен =»System.Web.UI» TagPrefix =»asp» %>» со страницы aspx, и теперь она работает нормально.

Ответ №19:

Если вы пытаетесь получить доступ к тегам из вашего собственного встроенного метода на серверной части, убедитесь, что вы не делаете этот метод статическим — иначе у вас не будет доступа к этим тегам…

 <p #id="myTag" runat="server">...</p>

private static void myMethod(){
    myTag.InnerText = "Hello" //You will not have access to this tag
}

private void myMethod(){
    myTag.InnerText = "Hello"; //You have access to tags
}
  

Ответ №20:

Столкнулся с аналогичной проблемой, поскольку элементы управления находились либо в: «LoginView», либо «AnonymousTemplate», а Viewstatemode был отключен

Устранено путем перемещения элементов управления Asp за пределы этих элементов тега

Ответ №21:

У меня также была похожая проблема в прошлом. Как вы упомянули, проект был ранее создан кем-то другим, поэтому он должен быть закодирован в кодировке на основе VB, и вы можете проверить это в деталях компиляции web.config. Попробуйте скопировать содержимое страницы aspx на вашу недавно созданную страницу C # aspx и вставьте код, и он тоже будет работать.

Ответ №22:

Проблема в том, что у вас может быть несколько aspx-файлов, директива codefile in page указывает на один и тот же файл codebehind. Ожидается, что один и тот же элемент управления будет существовать во всех файлах aspx, связанных с одним и тем же исходным кодом, и, таким образом, выдает ошибку компиляции.

Если у вас все еще возникает проблема с очисткой, аналогичная упомянутой выше, проверьте страницу конструктора и создайте ее заново.

Ответ №23:

 protected global::System.Web.UI.WebControls.CheckBox CheckBoxName ;
  

Добавьте свое имя идентификатора элемента управления в ваш designer.cs, и тогда оно будет доступно в вашем cs-файле.

Ответ №24:

Очень старый вопрос, но сегодня я столкнулся с этой проблемой и в итоге нашел решение, которое я не видел упомянутым здесь. Итак, я поделюсь этим.

На странице есть три файла: ASPX, the ASPX.CS и ASPX.Designer.CS

Когда вы редактируете HTML / разметку для ASPX напрямую (как я предпочитаю делать), это не приводит к автоматическому обновлению конструктора. Вот почему это не отображается в intellisense (по крайней мере, для меня). Чтобы заставить IDE обновить конструктор, у вас есть страница ASPX, открытая в Visual Studio (и пусть это будет сфокусированный файл); щелкните в меню «вид» и выберите «конструктор» (или нажмите Shift F7); IDE покажет вам представление дизайна; щелкните правой кнопкой мыши в области дизайна и выберите «обновить» из контекстного меню; сохраните файл; выберите «разметка» в меню «Вид» (или снова нажмите Shift F7); и проверьте файл конструктора, чтобы увидеть, соответствуют ли элементы управления, которые вы используете. добавленные теперь существуют в конструкторе.

Мог бы быть более простой способ, но это сработало для меня, чтобы иметь возможность получить доступ к элементу управления из исходного кода, который я добавил в HTML вручную.

Ответ №25:

Убедитесь, что ваш элемент управления вообще должен содержать ссылку на сгенерированный код! Например, если это в шаблоне списка, то вам нужно будет найти ссылку на него в обработчике события привязки элемента.

Это вывело меня из себя, потому что у меня было два элемента управления с одинаковым идентификатором, один был на уровне страницы, тогда как другой был в шаблоне.

Я думал, что сгенерированная ссылка, которую я использовал, была для ссылки в шаблоне, и я не мог понять, почему недавно добавленный элемент управления в шаблоне не привел к сгенерированной ссылке.

Ответ №26:

Я решил эту проблему, заставив VS повторно создать мой файл конструктора. Для этого :

  1. Я удалил свой файл designer.cs.
  2. Скопировал файл конструктора другой страницы.
  3. Переименовал файл конструктора и частичный класс в нем, чтобы соответствовать названию моей страницы code behind class.
  4. Удалил все из тела класса designer.
  5. Удалите все элементы управления со страницы разметки aspx.
  6. Сохранена страница aspx.
  7. Вставил элементы управления обратно и снова сохранил файл.

Это заставило VS воссоздать все элементы управления в пустом файле конструктора.

Надеюсь, у вас это сработает.

Ответ №27:

Это старый код, но сегодня я столкнулся с той же проблемой, и, поразмыслив тут и там, я обнаружил, что элементы управления, которые вы добавляете в GridViews, генерируются динамически, поэтому вам нужно обращаться к ним на основе индекса, в котором они присутствуют (точно так же, как списки / массивы в обычном программировании), а не идентификаторов.

Следовательно, если вы добавляете свои новые элементы управления в GridView, вам нужно будет получить к ним доступ через индексы. Хорошей практикой было бы создать ENUM в исходном коде для индексов элементов GridView.

Ответ №28:

Итак, старый вопрос, но если это поможет, попробуйте переместить элементы управления за пределы любого другого элемента управления, потому что доступ к ним отличается.