当前上下文中不存在名称为“GridView1”的内容。

4
我有两个文件,一个叫做TimeSheet.aspx.cs,另一个叫做TimSheet.aspx,以下是文件的代码供您参考。
当我构建应用程序时,我会收到错误提示:“当前上下文中不存在'GridView1'的名称”,尽管我有一个ID为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>
12个回答

6

问题可能是GridView1没有自动添加到designer.cs文件中。如果是这种情况,请手动在设计器中添加它。


我将其转换为Web项目,然后IDE创建了designer.cs文件,现在它可以工作了,谢谢。 - sameer

2
假设您正在构建一个WebSite项目,需要确保在构建过程中不会出现以下警告信息:
生成设计文件失败:[失败原因]
看起来您没有注册自定义控件EntityGridView。请查看Register directive了解如何注册它。

我已经在 web.config 中完成了此操作,这应该涉及到注册。 <controls> <add tagPrefix="data" namespace="TSMS.Web.Data" assembly="TSMS.Web"/> <add tagPrefix="data" namespace="TSMS.Web.UI" assembly="TSMS.Web"/> </controls> - sameer
你在解决方案的清理构建之后,是否检查了警告的错误列表? - João Angelo

1
我之前遇到过这样的问题,当我将一个已存在的文件(.aspx + .aspx.cs)添加到项目中时,设计师文件没有更新。我尝试了这里所有的方法,但发现创建一个新文件,复制代码,然后重建可以解决问题。是的,根据你要处理的文件大小,这可能很麻烦,但通常发生在我想快速测试一些演示代码(某个新项目等)并将其放入本地VS时。

如果有人需要帮助,我通过从另一个sln复制代码来重建解决方案,在新创建的Default.aspx Web表单中遇到了GridView1的错误。 GridView1是在设计文件中创建的,所以我将其删除并手动输入。但仍然无法解决问题。后来发现在页面指令[Inherits="AppName._Default"]的Default部分缺少了下划线。一旦我添加了下划线,GridView1就被识别出来了! - Doreen

0
我曾经遇到过同样的问题,但是所有的解决方案都对我无效。后来我发现,在管理部分的许多ASPX页面中,都被赋予了与项目实体文件中相同的类名。此外,每个页面都列出了实体命名空间,导致在添加实体命名空间到使用指令后,出现了命名空间冲突。我逐个检查了这些ASPX页面,并在每个页面上添加了“Page”,重新编译后一切正常。
我知道这个主题已经得到了回答,但我想把这个描述包含在内,以防其他人遇到同样的问题,而以上述解决方案都无效时,给他们提供另一个可能存在的问题。
我的项目中有21个页面需要更改,以下是使用UserEntity和Admin/UserEntity.aspx的示例:
在UsersEntity.aspx前端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 {

我对每个其他有问题的页面都做了同样的处理,除了“编辑”页面。

-- 我猜我本可以只删除使用实体命名空间的指令,但我真的想在我的页面中访问它,而且我认为将页面类与实体类具有完全相同的名称是不好的。这会让我感到困惑。


0

我不知道这是否有帮助,但我一直在与类似情况作斗争。

情况是这样的:我将一些代码从修改过的 asp.net 网页项目的模板中包含到我的项目中 - 特别是登录标记。出于某种原因,其中一个“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, 删除了设计文件并通过将页面转换为Web应用程序重新创建它 更改了文本框的名称, 删除并重新创建了文本框。
我决定进行一些实验,并发现在 asp:Login 标记外添加一个典型的文本框被识别,而在该标记内部添加它会使其无法在设计器中识别。
想到这可能有助于我或其他人拼凑出可能发生的事情。
任何人有任何想法是什么可能会导致 asp:Login 标签周围的这种行为?

0

它是嵌套的,因此某些事情不会自动发生。

  1. 您可能需要手动将其添加到设计器中,否则(在VB中)明确使用handles关键字或(在C#中)使用“+=”运算符明确连接。
  2. 确保所有事件都在控件标记中明确说明

由于我看到您明确列出了事件,因此我会检查设计器。


你好,我没有创建设计文件,我应该如何创建一个?我是使用Codesmith代码生成器中的.nettier模板生成的这段代码。 - sameer
在您的解决方案中搜索“'''GridView1控件”,希望能找到TimeSheets.designer.aspx.cs。是的,有时IDE出于某种原因不想让您轻松地访问它。 - Patrick Karcher

0

我在Visual Studio 2010中遇到了同样的问题。design.cs文件已经正确生成。我关闭了Visual Studio,然后重新打开它。这解决了我的问题(经过了很多挫折)。


0

0

我知道这是一个旧的帖子,但我刚刚遇到了类似的问题。经过几天的努力,我发现我的项目中有一个问题页面和代码后备副本。即使智能感知识别到它们,我在新页面上放置的对象在编译时仍然会出现“在当前上下文中不存在”的错误。我猜测VS由于默认命名空间中的重复页面而感到困惑。一旦我摆脱了备份,神奇地停止了出现错误。


这个答案给了我指引。我正在修改一个主页面的标记,该页面有一个对应的页面(标记略有不同)。两者共享一个代码后台。在修改其中一个主页面时,我遇到了“...在当前上下文中不存在”的错误,尽管智能感知起作用。在修改了对应页面的标记(以便两个页面具有相同的控件)之后,错误消失了。顺便说一下,这是在一个网站中(而不是一个Web应用程序)。 - bvgheluwe

0

最简单的方法是:

  1. 删除设计文件(YourFilename.aspx.designer.cs)
  2. 在“解决方案资源管理器”中选择ASPX文件
  3. 在“项目”菜单下找到“转换为Web应用程序”并单击它。在对话框窗口上单击“是”。
  4. 打开新创建的设计文件,确保命名空间与主要aspx.cs文件上的命名空间匹配(非常重要)
  5. 关闭设计文件。
  6. 保存解决方案。关闭并重新打开。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接