Имя GridView1 не существует в текущем контексте.

У меня есть два файла с именами TimeSheet.aspx.cs и TimSheet.aspx, код файла приведен ниже для справки.

когда я создаю приложение, я получаю сообщение об ошибке «Имя« GridView1 »не существует в текущем контексте», даже несмотря на то, что у меня есть элемент управления с идентификатором GridView1, и я также добавил runat = «server».

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

С уважением,

=======================================
TimeSheet.aspx.cs 
=======================================
#region Using directives
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using TSMS.Web.UI;
#endregion

public partial class TimeSheets: Page
{   
    protected void Page_Load(object sender, EventArgs e)
    {

        FormUtil.RedirectAfterUpdate(GridView1, "TimeSheets.aspx?page={0}");
        FormUtil.SetPageIndex(GridView1, "page");
        FormUtil.SetDefaultButton((Button)GridViewSearchPanel1.FindControl("cmdSearch"));
    }

    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string urlParams = string.Format("TimeSheetId={0}", GridView1.SelectedDataKey.Values[0]);
        Response.Redirect("TimeSheetsEdit.aspx?" + urlParams, true);
    }

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) {


    }
}
=======================================================
TimeSheet.aspx
=======================================================
<%@ Page Language="C#" Theme="Default" MasterPageFile="~/MasterPages/admin.master" AutoEventWireup="true"  CodeFile="TimeSheets.aspx.cs" Inherits="TimeSheets" Title="TimeSheets List" %>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder2" Runat="Server">Time Sheets List</asp:Content>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
        <data:GridViewSearchPanel ID="GridViewSearchPanel1" runat="server" GridViewControlID="GridView1" PersistenceMethod="Session" />
        <br />
        <data:EntityGridView ID="GridView1" runat="server"          
                AutoGenerateColumns="False"                 
                OnSelectedIndexChanged="GridView1_SelectedIndexChanged"
                DataSourceID="TimeSheetsDataSource"
                DataKeyNames="TimeSheetId"
                AllowMultiColumnSorting="false"
                DefaultSortColumnName="" 
                DefaultSortDirection="Ascending"    
                ExcelExportFileName="Export_TimeSheets.xls" onrowcommand="GridView1_RowCommand"         
            >
            <Columns>
                <asp:CommandField ShowSelectButton="True" ShowEditButton="True" />              
                <asp:BoundField DataField="TimeSheetId" HeaderText="Time Sheet Id" SortExpression="[TimeSheetID]" ReadOnly="True" />
                <asp:BoundField DataField="TimeSheetTitle" HeaderText="Time Sheet Title" SortExpression="[TimeSheetTitle]"  />
                <asp:BoundField DataField="StartDate" DataFormatString="{0:d}" HtmlEncode="False" HeaderText="Start Date" SortExpression="[StartDate]"  />
                <asp:BoundField DataField="EndDate" DataFormatString="{0:d}" HtmlEncode="False" HeaderText="End Date" SortExpression="[EndDate]"  />
                <asp:BoundField DataField="DateOfCreation" DataFormatString="{0:d}" HtmlEncode="False" HeaderText="Date Of Creation" SortExpression="[DateOfCreation]"  />
                <data:BoundRadioButtonField DataField="Locked" HeaderText="Locked" SortExpression="[Locked]"  />
                <asp:BoundField DataField="ReviewedBy" HeaderText="Reviewed By" SortExpression="[ReviewedBy]"  />
                <data:HyperLinkField HeaderText="Employee Id" DataNavigateUrlFormatString="EmployeesEdit.aspx?EmployeeId={0}" DataNavigateUrlFields="EmployeeId" DataContainer="EmployeeIdSource" DataTextField="LastName" />

            </Columns>
            <EmptyDataTemplate>
                <b>No TimeSheets Found!</b>
            </EmptyDataTemplate>
        </data:EntityGridView>
        <asp:GridView ID="GridView2" runat="server">
    </asp:GridView>
        <br />
        <asp:Button runat="server" ID="btnTimeSheets" OnClientClick="javascript:location.href='TimeSheetsEdit.aspx'; return false;" Text="Add New"></asp:Button>
        <data:TimeSheetsDataSource ID="TimeSheetsDataSource" runat="server"
            SelectMethod="GetPaged"
            EnablePaging="True"
            EnableSorting="True"
            EnableDeepLoad="True"
            >
            <DeepLoadProperties Method="IncludeChildren" Recursive="False">
                <Types>
                    <data:TimeSheetsProperty Name="Employees"/> 
                    <%--<data:TimeSheetsProperty Name="TimeSheetDetailsCollection" />--%>
                </Types>
            </DeepLoadProperties>
            <Parameters>
                <data:CustomParameter Name="WhereClause" Value="" ConvertEmptyStringToNull="false" />
                <data:CustomParameter Name="OrderByClause" Value="" ConvertEmptyStringToNull="false" />
                <asp:ControlParameter Name="PageIndex" ControlID="GridView1" PropertyName="PageIndex" Type="Int32" />
                <asp:ControlParameter Name="PageSize" ControlID="GridView1" PropertyName="PageSize" Type="Int32" />
                <data:CustomParameter Name="RecordCount" Value="0" Type="Int32" />
            </Parameters>
        </data:TimeSheetsDataSource>

</asp:Content>

person sameer    schedule 15.01.2010    source источник


Ответы (12)


Проблема может заключаться в том, что GridView1 не добавляется автоматически в файл designer.cs. В таком случае добавьте его в дизайнер вручную.

person eomeroff    schedule 15.01.2010
comment
Я преобразовал в веб-проект, затем в IDE создал designer.cs, теперь он работает, спасибо. - person sameer; 22.01.2010

Предполагая, что проект веб-сайта убедитесь, что при его создании вы не получаете таких предупреждений, как:

Не удалось создать файл дизайнера: [причина сбоя]

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

person João Angelo    schedule 15.01.2010
comment
Я сделал это в web.config, это должно быть связано с регистрацией. ‹Controls› ‹добавить tagPrefix = data namespace = TSMS.Web.Data assembly = TSMS.Web /› ‹add tagPrefix = data namespace = TSMS.Web.UI assembly = TSMS.Web /› ‹/controls› - person sameer; 15.01.2010
comment
Проверяли ли вы список ошибок на предмет предупреждений после чистой сборки решения? - person João Angelo; 15.01.2010

У меня была эта проблема раньше, когда я «добавил» существующий файл (.aspx + .aspx.cs) в проект, а файл дизайнера не обновлялся сам. Я пробовал многие / все вещи, написанные здесь, но я обнаружил, что создание нового файла, копирование кода передней части кода, затем кода программной части и затем перестройка, по сути, делают трюк. Да, это проблема * в зависимости от размера файла (ов), с которым вы работаете, но обычно это происходит, когда я хочу быстро протестировать какой-нибудь демонстрационный код, с которым я столкнулся ( какой-то новый проект и т. д.) и бросить его в мой локальный VS.

person 41st    schedule 25.08.2014
comment
Если это помогает кому-то другому, я перестраивал решение, копируя код из другого sln, и получил эту ошибку для GridView1 в моей недавно созданной веб-форме Default.aspx. GridView1 был создан в файле конструктора, поэтому я удалил его и ввел вручную. Нет любви. Оказывается, подчеркивание отсутствовало в Default в этой части директивы страницы [Inherits = AppName._Default]. Как только я добавил подчеркивание, GridView1 был распознан! - person Doreen; 07.11.2018

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

  1. Возможно, вам придется вручную добавить его в конструктор, иначе (в VB) явно используйте ключевое слово handles или (в C #) явно подключите его с оператором «+ =».
  2. Убедитесь, что все события или события явно указаны в разметке элемента управления

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

person Patrick Karcher    schedule 15.01.2010
comment
Привет, у меня нет созданного файла дизайнера. Как мне его создать. Я получил этот код с использованием шаблона .nettier с помощью генератора кода codemith. - person sameer; 15.01.2010
comment
В вашем решении найдите '' 'GridView1 control. И, надеюсь, TimeSheets.designer.aspx.cs. Да, иногда IDE по какой-то причине не позволяет вам легко добраться до нее. - person Patrick Karcher; 15.01.2010

У меня была такая же проблема в Visual Studio 2010. Файл design.cs был сгенерирован правильно. Я закрыл Visual Studio и снова открыл ее. Это решило эту проблему для меня (после долгого разочарования).

person Ben Liyanage    schedule 09.06.2010

Не знаю, поможет ли это, но я боролся с подобной ситуацией.

Ситуация: я включил в свой проект код из модифицированного некоторого шаблонного веб-проекта asp.net - в частности, разметку для входа в систему. По какой-то причине один из элементов управления Textbox «UserName» не распознается в дизайнере. Как ни странно, распознается элемент управления UserNameLabel на следующей строке разметки:

<%@ Page Language="C#" AutoEventWireup="True" CodeBehind="Logon.aspx.cs" MasterPageFile="~/Site.master" Inherits="SimpleWebApp.Logon" %>

<asp:Content ID="LogonRegister" ContentPlaceHolderID="MainContent" runat="server">
     <div></div>
        <table align="center">
        <tr>
            <td valign="top">
                 *<asp:TextBox ID="TextBox1" runat="server" CssClass="textEntry"></asp:TextBox>*
                 <asp:Login ID="LoginUser" runat="server" EnableViewState="true" RenderOuterTable="false">
                    <LayoutTemplate>
                        <span class="failureNotification">
                            <asp:Literal ID="FailureText" runat="server"></asp:Literal>
                        </span>
                        <asp:ValidationSummary ID="LoginUserValidationSummary" runat="server" CssClass="failureNotification"/>
                        <div class="accountInfo">
                            <fieldset class="login">
                                <legend>Log In</legend>
                                <p>
                                    **<asp:Label ID="lblUserNameLabel" runat="server">Username:</asp:Label>**
                                    ***<asp:TextBox ID="UserName" runat="server" CssClass="textEntry"></asp:TextBox>***
                                </p>
...

Что я пробовал: я перезапустил VWD 2010, удалил файл конструктора и воссоздал его, преобразовав страницу в веб-приложение, изменил имя текстового поля, удалил и воссоздал текстовое поле.

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

Подумал, что это может помочь мне или кому-то еще собрать воедино, что может происходить.

Кто-нибудь знает, что может вызвать такое поведение вокруг тега asp: Login?

person Thotman    schedule 22.08.2010

Для получения близких ответов посетите похожий вопрос: Как заставить Visual Studio регенерировать файлы .designer для файлов aspx / ascx?.

@sameer: ​​Мне было бы интересно услышать, пытались ли вы заменить CodeFile="TimeSheets.aspx.cs" на CodeBehind="TimeSheets.aspx.cs" перед преобразованием проекта.

person WynandB    schedule 24.11.2010

Я знаю, что это старый поток, но я просто боролся с проблемой, подобной этой. Через пару дней я понял, что у меня есть резервная копия проблемной страницы и кода в моем проекте. Я продолжал получать ошибку «не существует в текущем контексте» во время компиляции для объектов, размещенных на новой странице, даже если intellisense распознал их. Я предполагаю, что VS запутался из-за повторяющихся страниц в пространстве имен по умолчанию. Как только я избавился от резервной копии, я волшебным образом перестал получать ошибки.

person user735232    schedule 18.07.2011
comment
Этот ответ направил меня. Я изменял разметку главной страницы, у которой есть аналог (с немного другой разметкой). Оба имеют общий код. При изменении одной из двух главных страниц я обнаружил, что ... не существует в текущем контексте при попытке сборки (даже если Intellisense работал). После изменения разметки копии (чтобы на обеих страницах были одинаковые элементы управления) ошибка исчезла. Fwiw, это было на веб-сайте (а не в веб-приложении). - person bvgheluwe; 27.05.2014

У меня была такая же проблема, ни одно из решений у меня не помогло. Я понял, не теряя слишком много времени, что многим страницам ASPX в разделе администратора было присвоено то же имя класса, что и объектам в файлах объектов проекта. Кроме того, на каждой из страниц перечислено пространство имен Entities, вызывающее конфликты, поскольку после добавления пространства имен entity в директивах using возникли конфликты пространств имен. Я просмотрел и добавил «Страницу» на каждую страницу ASPX, перекомпилировал, и все работало нормально.

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

В моем проекте мне нужно было изменить 21 страницу, вот пример с использованием UserEntity и Admin / UserEntity.aspx:

на странице aspx лицевой стороны UsersEntity.aspx изменено:

<%@ Page Language="C#"
         Theme="Default" 
         MasterPageFile="~/MasterPages/admin.master" 
         AutoEventWireup="true" 
         Inherits="UsersEntity" 
         Title="UsersEntity" 
         Codebehind="UsersEntity.aspx.cs" 
%>

to:

<%@ Page Language="C#"
         Theme="Default" 
         MasterPageFile="~/MasterPages/admin.master" 
         AutoEventWireup="true" 
         Inherits="UsersEntityPage" 
         Title="UsersEntity" 
         Codebehind="UsersEntity.aspx.cs" 
%>

в коде UsersEntity.aspx.cs я изменил:

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

to:

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

и в UsersEntity.aspx.designer.cs (страница дизайнера): эта страница автоматически изменилась, когда я изменил код страницы на:

public partial class UsersEntityPage {

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

- Думаю, я мог бы просто удалить директиву using для пространства имен Entity, но я действительно хочу иметь доступ к этому на моих страницах, плюс я думаю, что для классов страниц нехорошо иметь одно и то же имя как мои классы сущностей. Меня это смущает.

person stephenbayer    schedule 09.08.2011

скопируйте код файла _ .aspx и вставьте его на страницу _ .aspx.cs.

если это не так, то импортируйте пространства имен полностью вверх.

  1. ‹% @ Page Language =" C # "AutoEventWireup =" true "%>‹% @ Import Namespace = "System.Data"%> ‹% @ Import Namespace =" System.Data.SqlClient "%>
person Ehsan    schedule 14.10.2013

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

person Jeff Ridge    schedule 11.11.2015

Самый простой способ:

  1. Удалите файл дизайнера (YourFilename.aspx.designer.cs)
  2. Выберите файл ASPX в обозревателе решений.
  3. В меню "Проекты" найдите пункт "Преобразовать в веб-приложение" и щелкните его. Щелкните Да в диалоговом окне.
  4. Откройте только что созданный файл конструктора и убедитесь, что пространство имен соответствует пространству имен в основном файле aspx.cs (ОЧЕНЬ ВАЖНО)
  5. Закройте файл дизайнера.
  6. Сохраните решение. Закройте и снова откройте.
person Aamir    schedule 29.08.2019