Элементы управления 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 не определен в текущем контексте...
Что я делаю неправильно?

28 ответов

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

Это происходит особенно со старыми вещами в визуальной студии.

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

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

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

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

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

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

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

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

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

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

Например:

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

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

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

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

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

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

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

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

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

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

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

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

Первый

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

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

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

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

Оказывается, это потому, что я переключил мой редактор по умолчанию для файлов ASPX на "Редактор HTML" вместо "Редактор веб-форм". Я сделал это, потому что intellisense убивал мой компьютер каждый раз, когда я открывал файл ASPX. Когда я щелкнул правой кнопкой мыши на этой странице, чтобы "Открыть с помощью..." в "Редакторе веб-форм", и снова добавил элементы управления, все заработало отлично, и теперь они доступны в коде файла.

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

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

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

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

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

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

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

Код перед переименованием:

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

Код после переименования:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам