簡體   English   中英

Asp.net 控件無法在后面的代碼中訪問

[英]Asp.net controls are not accessible in code behind

我有一個以前由其他人構建的項目。 當我嘗試向頁面添加新控件時,我無法在后面的代碼中訪問它。 當我嘗試訪問它時,會出現一條錯誤消息,指出控件未在當前上下文中定義。

<%@ 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 未在當前上下文中定義...

我究竟做錯了什么?

當我通過在解決方案中創建 asp.net 應用程序項目並復制 aspx 和 aspx.cs 文件將網站移動到主解決方案時,我遇到了這個問題。 我通過右鍵單擊項目並轉換為 web 應用程序來解決它。 這創建了必要的 Designer.cs 文件,其中包含 aspx 頁面上的 asp 對象的代碼。

這尤其發生在視覺工作室中的舊東西上。

在 1.1 中(在“部分類”之前),您總是可以在代碼隱藏中看到控件聲明。

在以后的版本中,他們將它移到了一個 cs.designer 文件中(所以現在你有了部分類——一部分在 .cs.designer 文件中,一部分在 .cs 文件中)。

如果您使用的是視覺工作室“項目”,那么您可以打開 cs.designer 文件並添加您的控件。 看看所有其他控件是如何聲明的——這就是你所要做的。

如果您正在使用視覺工作室“網站”,那么您就不走運了。 無法查看或編輯 cs.designer 文件,因為在網站編譯之前它不存在。

檢查以確保該頁面的 Designer.cs 文件包含在項目中。 右鍵單擊它,看看是否有“包含在項目中”的選項。

剛剛發現這個問題,我意識到它已經很老了,但我想我有一個潛在的答案。 您的設計器部分 class 的代碼隱藏可能不包含在項目中 - 有時會在您重命名和/或復制文件時發生。

Go 到您的頁面(我們稱之為 Test.aspx)並在解決方案資源管理器中展開其樹 - 您是否看到名為 Test.aspx.csTest.aspx.designer.cs 的文件? 如果沒有,請在解決方案資源管理器頂部查找標記為顯示所有文件的按鈕。 單擊它 - 如果您現在在那里看到 .designer.cs 文件,請右鍵單擊它並 select “包含在項目中”。 在我遇到這個問題后,這讓我再次開始。

如果您在.cs頁面中找不到控件,只需在designer.cs頁面中添加控件引用並嘗試再次訪問它。

我相信它會100%。 這就是我學到的

你有沒有重命名你的項目文件? 如果有,請記住重命名 ASPX 頁面頂部的繼承。

如果您在網站的 VS2013 中遇到此問題(而不是 Web 應用程序)並且有多個 aspx 文件共享代碼隱藏,那么您需要確保所有 aspx 文件具有完全相同的控件集合。

在以前的 Visual Studio 版本中,這不是問題,但看起來 VS2013 已經收緊了。

我希望這對某人有所幫助-感謝上面謝爾蓋的評論,我才發現它。

使用CodeBehind屬性而不是 Page 標簽的CodeFile屬性。

例如:

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

這發生在我在 VS2010 的一個網站項目中,但由於我是一個更大團隊的一員,我無法按照 Domenic 的建議轉換為 Web 應用程序。

原來這是因為我將 ASPX 文件的默認編輯器切換為“HTML 編輯器”而不是“Web 表單編輯器”。 我這樣做是因為每當我打開 ASPX 文件時,智能感知都會殺死我的計算機。 當我右鍵單擊此頁面以“打開方式...”“Web 表單編輯器”並再次添加控件時,它運行良好,它們現在可以在代碼隱藏文件中使用。

將 empty.aspx.designer.cs 文件添加到您的項目中

要讓 Visual Studio 自動創建 .aspx 頁面控件的聲明,您可以將一個空的YourWebPageName.aspx.designer.cs -文件添加到您的項目中。

如果從外部添加到項目中,您可以通過右鍵單擊項目,選擇新項目並將 new.cs 文件包含到您的項目中來將其添加到您的項目中。

然后,只要您在設計編輯器中對 YourWebPageName 頁面進行小幅修改,Visual Studio 就會使用聲明填充您的 empty.cs 文件。

第一的

  • 確保您為控件分配了一個 ID

如果這沒有幫助

  • 關閉添加控件的頁面
  • 重建/編譯項目並再次打開頁面

以下是我遇到類似問題時通過 go 進行的故障排除列表。

  1. 確保您要在后面的代碼中使用的 ID 實際在標記中聲明
  2. 確保這些元素具有 'runat="server"'
  3. 如果您在使用特定控件時遇到問題,請嘗試在頁面頂部附近創建一個,如果這也不起作用,那就是代碼生成問題

如果 3. 是您的問題,請暫時刪除控件的標記以及您在后面的代碼中對它們的任何引用,即制作它以便您可以成功構建。 如果您打開了 Designer.cs 文件並進行重建,請關閉它。 之后嘗試重新添加一個基本控件(按照步驟 1 和 2)並查看它是否顯示(應該)。 然后根據需要重新添加您的標記,您應該會發現代碼生成再次正常工作。

I had the same issue when 2 ASP Pages were using the same Code Behind file (It was ASP.NET Web Site project in Visual Studio 2013, not an ASP.NET Web Application). 我已經通過將其更改為對每個頁面使用不同的代碼隱藏文件來解決該問題。

可能的原因:

  • id 不匹配。
  • 控件 at.aspx 文件中不存在 runat="server"。

我找到的解決方案,除了糾正上述問題外,還重建項目:

您需要注意的另一件事是,在重建之前,關閉設計器文件。

我有一個類似的問題。 當我嘗試重命名 aspx 文件時遇到了這個問題。 就我而言,當我將 aspx 文件重命名為 ModifyRecords 時,class 名稱未從 UpdateRecords 更新為 ModifyRecords。 因此,無法從后面的代碼訪問 ASP.NET 控件。

重命名前的代碼:

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

重命名后的代碼:

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

如果您嘗試重命名 aspx 文件或從其他文件復制粘貼,只需確保 class 名稱已更新。

在其他部分 class 手動輸入聲明

我也有同樣的問題。 我通過從 aspx 頁面中刪除“ PublicKeyToken=31bf3856ad364e35” Namespace="System.Web.UI" TagPrefix="asp" %> " 找到了解決方案,它現在可以正常工作了。

如果您嘗試從后端自己的內置方法訪問標簽,請確保您沒有使用此方法 static - 否則您將無法訪問這些標簽...

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

遇到了類似的問題,因為控件位於:“LoginView”或“AnonymousTemplate”中,並且 Viewstatemode 被禁用

通過將 Asp 控件移到這些標記元素之外來解決

我過去也遇到過類似的問題。 正如您所提到的,該項目以前是由其他人構建的,因此必須使用基於 VB 的編碼進行編碼,您可以在 web.config 編譯詳細信息中查看。 嘗試將 aspx 頁面內容復制到新創建的 C# aspx 頁面並粘貼代碼,它也可以工作。

問題是您可能有多個 aspx 文件,其中頁面指令中的 codefile 指向相同的代碼隱藏文件。 它期望相同的控件存在於鏈接到相同代碼的所有 aspx 文件中,從而引發編譯錯誤。

如果您仍然遇到與上述相同的問題,請檢查設計器頁面並重新生成一個。

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

將您的控件 ID 名稱添加到您的 Designer.cs,然后它將在您的 cs 文件中可用。

非常老的問題,但我今天遇到了這個問題,最終找到了一個我在這里沒有提到的解決方案。 所以,我來分享一下。

一個頁面中有三個文件:ASPX、ASPX.CS 和 ASPX.Designer.CS

當您直接編輯 ASPX 的 HTML/標記時(就像我喜歡做的那樣),它不會自動更新設計器。 這就是為什么它沒有出現在智能感知中(至少對我而言)。 要讓 IDE 更新設計器,您需要在 Visual Studio 中打開 ASPX 頁面(並讓它成為焦點文件); 單擊“查看”菜單,然后單擊 select“設計器”(或按 Shift+F7); IDE 將向您展示設計視圖; 右鍵單擊設計區域並從上下文菜單中“刷新”select; 保存文件; select “查看”菜單中的“標記”(或再次按 Shift+F7); 並檢查設計器文件以查看您添加的控件現在是否存在於設計器中。

可能有一種更簡單的方法,但這對我來說能夠從我手動添加到 HTML 的代碼中訪問控件。

我通過強制 VS 重新生成我的設計器文件解決了這個問題。 為了那個原因:

  1. 我刪除了我的 Designer.cs 文件。
  2. 復制了另一個頁面的設計器文件。
  3. 重命名設計器文件和其中的部分 class 以匹配我在 class 后面的頁面代碼的名稱。
  4. 刪除了設計師 class 身上的所有內容。
  5. 從 aspx 標記頁面中剪切所有控件。
  6. 保存了aspx頁面。
  7. 將控件粘貼回來並再次保存文件。

這使得 VS 重新創建了空白設計器文件中的所有控件。

希望這對你有用。

確保你的控件應該有一個生成的代碼隱藏引用,例如。 如果它在列表模板中,那么您需要在項目綁定事件處理程序中查找對它的引用。

這讓我抓狂,因為我有兩個具有相同 ID 的控件,一個在頁面級別,另一個在模板中。

我認為我使用的生成引用是模板中的引用,我無法弄清楚為什么模板中新添加的控件沒有生成生成引用。

確保 page 指令中的 codeBehind 屬性引用您調用控件的 cs 文件

這么老的問題,但是如果它有助於嘗試將控件移到任何其他控件之外,因為訪問會有所不同。

這是一個舊問題,但我今天遇到了同樣的問題,在到處碰頭之后,我發現你在 GridViews 中添加的控件是動態生成的,所以你需要根據它們所在的索引來訪問它們(就像常規編程中的列表/數組一樣)而不是 ID。

因此,如果您在 GridView 中添加新控件,則需要通過索引訪問它們。 一個好的做法是在 GridView 項目索引的代碼中創建 ENUM。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM