首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在asp.net中回发后,在网格视图(复选框)中动态添加的控件将消失

在ASP.NET Web Forms应用程序中,当页面进行回发(PostBack)时,由于页面生命周期的原因,动态添加到GridView中的控件会丢失。这是因为动态添加的控件不会被序列化到ViewState中,因此在回发后无法恢复。

基础概念

  • ViewState: ASP.NET中的一个隐藏字段,用于在页面回发之间保持控件的状态。
  • PostBack: 用户与页面交互(如点击按钮)导致页面重新加载的过程。

为什么控件会消失?

当页面进行回发时,ASP.NET会尝试从ViewState中恢复控件的状态。由于动态添加的控件在第一次加载时没有被添加到ViewState中,因此在回发后它们不会被自动重新创建。

解决方案

有几种方法可以解决这个问题:

方法一:使用RowCreated事件

在GridView的RowCreated事件中动态添加控件,这样可以确保每次页面加载时都会创建这些控件。

代码语言:txt
复制
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        CheckBox chk = new CheckBox();
        chk.ID = "chkSelect";
        e.Row.Cells[0].Controls.Add(chk);
    }
}

然后在GridView的定义中绑定这个事件:

代码语言:txt
复制
<asp:GridView ID="GridView1" runat="server" OnRowCreated="GridView1_RowCreated">
</asp:GridView>

方法二:使用RowDataBound事件

RowDataBound事件中添加控件,并使用FindControl方法来访问这些控件。

代码语言:txt
复制
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        CheckBox chk = new CheckBox();
        chk.ID = "chkSelect";
        e.Row.Cells[0].Controls.Add(chk);
    }
}

同样地,在GridView的定义中绑定这个事件:

代码语言:txt
复制
<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound">
</asp:GridView>

方法三:手动管理ViewState

如果你需要在回发后保留控件的状态,可以在代码中手动管理ViewState。

代码语言:txt
复制
private const string CheckBoxPrefix = "chkSelect";

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // 绑定数据到GridView
        BindGridView();
    }
    else
    {
        // 在回发后重新创建控件
        CreateDynamicControls();
    }
}

private void BindGridView()
{
    // 假设你已经有了数据源并绑定了GridView
    GridView1.DataSource = yourDataSource;
    GridView1.DataBind();
}

private void CreateDynamicControls()
{
    foreach (GridViewRow row in GridView1.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
        {
            CheckBox chk = new CheckBox();
            chk.ID = CheckBoxPrefix + row.RowIndex;
            row.Cells[0].Controls.Add(chk);
        }
    }
}

应用场景

这种方法适用于需要在GridView中动态添加控件,并且希望在页面回发后仍然保留这些控件的情况。例如,实现一个允许用户批量选择项目的功能。

通过上述方法,你可以确保即使在页面回发后,动态添加到GridView中的控件也不会消失。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ComponentOne.NET仪表板布局控件 — 实现可视化数据大屏展示

概述 .NET开发领域的总体趋势是互操作性,葡萄城全功能 .NET控件集 ComponentOne 在2018将延续这一趋势:无论是 .NET平台,ASP.NET Core,Xamarin还是未来计划中的...多选输入控件(MultiSelect) 此控件增加了下拉列表中每个选项旁边的复选框,用户可以一次选择多个项目,所选项目在文本区域中显示为标签类型。...智能选项卡控件(TabPanel) 它是一个简单有效、智能轻量的导航控件,允许用户在刷新的内容视图之间移动,该控件可以嵌入 ComponentOne 控制面板中。...坐标轴和图表 WinForm 和XAML中已经提供的Point和Figure图表将添加到MVC中。Point 和图表由X和O的列组成,代表过滤后的价格变动。...FlexSheet Excel 中的网格和工作表支持将添加到FlexSheet中,您将能够通过客户端和服务器端的API进行添加、删除和格式化工作表的操作。

5.3K20

ASP.Net Web Page深入探讨

我们在使用代码绑定的时候,在设计页面拖一个控件,然后切换到代码视图,就可以直接在Page_Load中使用这个控件了,既然控件是在子类中产生的,那为什么在父类中可以直接使用呢?...我们前面提到ASPX的源代码是被生成器动态生成和编译的,生成器会产生动态生成每一个服务器控件的代码,在生成的时候,它会检查父类有没有声明这个控件,如果声明了,它会添加类似下面的一句代码: this.DataGrid1...“这种连续性假象是由 ASP.NET 页框架、页及其控件实现的。回发后,控件的行为必须看起来是从上次 Web 请求结束的地方开始的。...请参阅捕获回发事件。 注意 只有处理回发事件的控件参与此阶段。...,所以自定义控件的回发数据更改事件需要在此方法中触发。

2.1K70
  • Asp.net页面生命周期

    因为Request对象不是在HttpHandler中实例化的,具体请参考:asp.net管道模型(管线模型)之一发不可收拾)。 4.页面初始化(OnInit):读取页面和控件的值,生成动态服务器控件。...中实例化的控件的回传值并设置控件到相应的属性上(控件的LoadPostData):过程跟步骤9一样,只是给在Page_Load中实例化的控件一个得到回传值的机会,要好好珍惜哦!...15.回发事件处理:如Button的Click事件处理程序;注意——若在这里添加服务器控件,那么将不会触发loadviewstate和loadpostback。...> 当MaxPageStateFieldLength属性设置为正数时,发送到客户端浏览器的视图状态将分为多个隐藏字段,并且每个字段的值都小于在MaxPageStateFieldLength属性中指定的大小...;(可以在这事件中截取转换后的html进行加工,然后将结果html字符串写到Response.OutputStream中。

    2.4K80

    常见 Datagrid 错误

    ASP.NET 在每个控件的 ID 前面加上该控件层次结构中每个命名容器的 ID,这样 Textbox 将具有唯一的 ID,与页面中所有其他控件的 ID 都不相同。...忘记在每个 Datagrid 事件中执行 .DataBind() 调用,从而导致回发 一个常见的问题是:“当我点击 Datagrid 某一行中的 Edit(编辑)链接时,页面回发,且不包含任何数据。...运行时不必要地在 Datagrid 中动态创建 Datagrid 控件或列 在某些业务和技术方案中,在运行时创建 ASP.NET 控件是必要的,也是完全合适的。...例如,有时需要在选择其他页面选项后,才能在运行时确定用户界面。或是要创建一个复合服务器控件,其中的每个子控件都需要动态创建,因为无法以声明的方式创建这些子控件。...如果遇到这些情况,请注意,提交页面时不要保留这些动态控件。必须在页面生命周期的早期,在每次回发时重新创建动态控件(例如在 Page_Init 事件中)。警言:创建控件要早,创建控件要勤。

    2.4K20

    asp.net页面事件执行顺序(转+原创补充) Button1_Click处理返回数据前还有其他处理!!!例如onPreLoad

    //注意 //如果请求是回发请求,则控件的值尚未从视图状态还原。如果在此阶段设置控件属性,则其值可能会在下一事件中被重写。...//在 Page 引发该事件后,它会为自身和所有控件加载视图状态,然后会处理 Request 实例包括的任何回发数据。...//注意 //在回发请求中,如果页包含验证程序控件,请在执行任何处理之前检查 Page 和各个验证控件的 IsValid 属性。...将忽略此时对页或控件进行的任何更改。 //使用该事件执行满足以下条件的任务:要求已经保存了视图状态,但未对控件进行任何更改。...在控件中,使用该事件对特定控件执行最后清理,如关闭控件特定数据库连接。

    85950

    UpdatePanel 控件

    动态 UpdatePanel 控件 现有两种方法可将 UpdatePanel 控件动态添加到页面中,而且这两种方法已在 RTM 版本中得到改进。...使用动态 UpdatePanel 控件的两种方法是: 控件开发人员可以将 UpdatePanel 控件添加到其自定义复合控件中。...如果页面中不存在 ScriptManager 控件,它还将提供回退到常规回发的能力。 页面开发人员可以将 UpdatePanel 控件添加到其他控件的模板中。...开发与 UpdatePanel 控件兼容的控件 RTM 重要更改:在 ASP.NET 2.0 AJAX Extensions 1.0 最终版本中,Beta 和 RC 版本中包括的要与异步回发兼容的 ASP.NET...例如,在 CTP 版本中,如果动态添加或删除了 ASP.NET 验证程序控件,那么,这些控件将不会在 UpdatePanel 中正常工作,例如使用 Wizard 控件在每一步对用户输入进行验证的时候。

    1.3K30

    通过避免下列 10 个常见 ASP.NET 缺陷使网站平稳运行

    图 2 说明动态加载用户控件以及转换返回的控件引用的正确方法。...视图状态:无声的性能杀手 从某种意义上说,视图状态是有史以来最伟大的事情。毕竟,视图状态使得页面和控件能够在回发之间保持状态。...因此,您不必像在传统的 ASP 中那样编写代码,以防止在单击按钮时文本框中的文本消失,或在回发后重新查询数据库和重新绑定 DataGrid。...您可以通过将 EnableViewState 设置为 false 来关闭单个控件的视图状态,但某些控件(特别是 DataGrid)在不能使用视图状态时会失去某些功能。...在 ASP.NET 2.0 中使用相同的方法,但是 ASP.NET 2.0 能够提供更简单的方法将视图状态保留在会话状态中。

    3.6K80

    ASP.NET ViewState之详解

    今天我们来了解一下在ASP.NET中ViewState的作用。 ViewState=视图状态; ViewState的通用解释就是:是 ASP.NET 页中的存储库,可以存储必须在回发过程中保留的值。...页框架使用视图状态在各个回发之间保存控件设置。...在各个回发之间保存值,而不将这些值存储在会话状态或用户配置文件中,将信息存储在视图状态中,这样在下次将该页发送到服务器时,代码便可以在页加载事件过程中访问这些信息。...所谓回发:就是由服务器控件导致的页面刷新。 ASP.NET 页框架使用视图状态在往返过程之间保存页和控件值。...的值,然后在下一次的回发事件中,DropDownList的值就会是通过Button事件修改过的值,而不是初始值。

    1.5K30

    C#进阶-ASP.NET常用控件总结

    />6、asp:CheckBox (复选框)ASP.NET CheckBox 控件用于在页面上显示一个复选框。...ASP.NET中,动态事件绑定是通过在代码后台动态创建控件并将事件处理程序与之关联来实现的。...例如,在Page_Load事件中动态创建按钮控件,并为其添加点击事件处理函数。当用户与该动态创建的按钮交互时,将调用相应的事件处理函数执行特定操作。...CreateUserWizard1_CreatedUser事件处理程序用于处理用户注册成功后的逻辑,您可以在这里执行一些必要的操作,如将新用户添加到角色、向数据库中添加用户额外信息等。...在后台代码中,您可以通过事件来处理角色管理过程中的逻辑,如在添加角色之前执行某些操作(RoleManager1_RoleAdding事件)、在角色添加成功后执行某些操作(RoleManager1_RoleAdded

    16110

    VBA专题10-25:使用VBA操控Excel界面之一个示例程序

    1.7 运行时使用图像动态地填充库控件。 2....2.3 如果选择了指定的项目(例如Group2),那么激活指定的工作表(名为Sheet2),并对其外观作出下面的改变: 2.3.1 在页面布局视图中显示工作表 2.3.2 隐藏行和列标题 2.3.3 删除工作表中的网格线...如果取消选取(或选取)指定的内置复选框(例如,在“视图”选项卡中的“编辑栏”复选框),那么禁用(或启用)自定义控件(例如,在“视图”选项卡中的G5B1按钮)。 5....(例如,在Group 1中的G1B1,在Group 2中的G2B2,在Group 3中的G3B3,在Group 4中的G4B3) 6....右击工作表选项卡,选择插入来添加一个图表工作表。 3. 重命名工作表为Sample、Sheet1和Sheet2。 4. 激活工作表Sheet1,选择一个单元格区域,在“名称”框中输入“Sheet1!

    2.4K10

    ASP.Net请求处理机制初步探索之旅 - Part 4 WebForm页面生命周期

    (这里其实是将这些服务器控件作为子控件添加到页面(页面本身就是一个大的控件)中,在树形结构中Page就是一个根节点,而那些Page中的控件则是Page的孩子节点)。..._requestValueCollection); ...... } } 加载结束后,会经历第二次的处理回发数据的事件。...查看源代码,通过遍历状态改变了的控件的集合(在第一次进行ProcessPostData时会检查控件的状态是否发生了改变,如果改变了就添加到一个集合中) internal void RaiseChangedEvents...,会调用RaisePostBackEvent方法触发例如按钮控件的回发事件,例如Button_Click回发事件。...我们可以通过查看ASP.NET生成的前端HTML代码看到这两个参数:下图是一个设置为AutoPostBack的DropDownList控件,可以发现回发事件都是通过调用_doPostBack这个js代码进行表单的

    1.4K20

    ASP.NET AJAX UpdatePanel 控件实现剖析

    那这个控件是如何实现这种局部刷新的哪,透过其实现机制我们可以更清楚其优缺点,便于我们确定其使用场合。本文将重点阐述ASP.NET AJAX控件UpdatePanel的实现机制。 1....,在Runtime点击UpdatePanel中的Button控件,则不会引起整个页面刷新,只是用来显示当前时间的Label得到更新。...在封装这个请求的时候,当前页面的所有字段以及视图状态都会被打包在请求中,另外还设置了这次Request的HTTP头:request.get_headers()['X-MicrosoftAjax'] =...AJAX回发引起的请求生命周期: ? 从上图我们可以看到,页面的生命周期与普通回发是一样的,同样页面上的控件也会经历相应的生命周期。...方法最终处理了AJAX回发所需要的HTML代码,在这个方法中会遍历页面上所有涉及到的UpdatePanel控件,得到其更新后的HTML代码后,与隐藏字段还有一些额外信息一起打包,然后传递给客户端。

    6.8K100

    配电网WebGIS研究与开发

    在ASP.NET网页的默认模型中,单击按钮或执行一些其他操作会导致回发,此时将重新创建页及其控件,并在服务器上运行页代码,且新版本的页被呈现到浏览器。...在客户端回调中,客户端脚本函数会向ASP.NET网页发送一个请求。该网页运行其正常生命周期的修改版本——初始化页并创建其控件和其他成员,然后调用特别标记的方法。...ASP.NET客户端回调:     在ASP.NET 2.0的发布版本中,微软介绍了一种简单的客户端回调(实际上是对XmlHttpRequest的一个封装框架),在Web应用程序中的一种轻量级,而且高效的...ASP.NET AJAX :     在ASP.NET 2.0 Web应用程序中,微软提供了两种解决方案来处理异步回发:一个是利用ASP.NET客户端回发的回调框架解决方案,另外一个是ASP.NET...本次毕业设计中涉及地图查询和浏览的主页中的AJAX框架就是基于ASP.NET AJAX的,因此使用此框架只需要拖动一些ASP.NET AJAX控件可以很方便地做出界面友好,动态性能优越的页面框架来,大大减少了开发的工作量和难度

    1K10

    ASP.NET中常用的优化性能的方法(转贴,Icyer收集整理)

    字符串操作性能优化   使用值类型的ToString方法   在连接字符串时,经常使用"+"号直接将数字添加到字符串中。...21.只在必要时保存服务器控件视图状态 自动视图状态管理是服务器控件的功能,该功能使服务器控件可以在往返过程上重新填充它们的属性值(您不需要编写任何代码)。...22.避免到服务器的不必要的往返过程 虽然您很可能希望尽量多地使用 Web 窗体页框架的那些节省时间和代码的功能,但在某些情况下却不宜使用 ASP.NET 服务器控件和回发事件处理。...使用 Page.IsPostBack 避免对往返过程执行不必要的处理 如果您编写处理服务器控件回发处理的代码,有时可能需要在首次请求页时执行其他代码,而不是当用户发送包含在该页中的 HTML 窗体时执行的代码...注意 如果不运行这种检查,回发页的行为将不更改。Page_Load 事件的代码在执行服务器控件事件之前执行,但只有服务器控件事件的结果才可能在输出页上呈现。

    2.7K100

    【性能优化】ASP.NET常见性能优化方法简述

    字符串操作性能优化 使用值类型的ToString方法 在连接字符串时,经常使用"+"号直接将数字添加到字符串中。...若要禁用视图状态,请将控件的EnableViewState 属性设置为 false。 您还可以使用 @ Page 指令禁用整个页的视图状态。当您不从页回发到服务器时,这将十分有用。...避免到服务器的不必要的往返过程 虽然您很可能希望尽量多地使用 Web 窗体页框架的那些节省时间和代码的功能,但在某些情况下却不宜使用 ASP.NET 服务器控件和回发事件处理。...使用 Page.IsPostBack 避免对往返过程执行不必要的处理 如果您编写处理服务器控件回发处理的代码,有时可能需要在首次请求页时执行其他代码,而不是当用户发送包含在该页中的 HTML 窗体时执行的代码...注意 如果不运行这种检查,回发页的行为将不更改。Page_Load 事件的代码在执行服务器控件事件之前执行,但只有服务器控件事件的结果才可能在输出页上呈现。

    4K60

    asp.net mvc实战-学习笔记(1)

    “HellowWorld”示例 4 强类型视图 5 路由基础 在微软平台上开发web项目的时间越长你越能体会到如下的痛苦 九十年代开发人员用服务器上的可执行程序创建动态网站 这些程序(CGI在当时是一个非常普遍的技术...服务器端的页面时一种HTML代码和动态脚本混合的模式 这相对来说是一个巨大的进步 随后整个世界出现了大量的服务端标记程序 早在2002年,asp.net就出现了。...命名空间中的所有东西的耦合过紧了 在code-behind文件中没有任何希望做单元测试 在page_load事件中有几种树来打印 虽然早前的asp,net版本存在一些缺点 但是asp.net和.net...asp.net应用程序 控制逻辑代码被封装在一个类里以减轻依赖性 视图就是只有HTML代码和controller提供的对象的页面, 回发事件生命周期不负存在 ViewState也不是必须的了 在本章中...,我们将带您完成第一个asp.net mvc项目 完成这个项目后,您将为将来的更进一步的研究做好准备 在本章 我们将建立一个新的asp.net mvc framework web应用程序 我们将梳理默认的应用程序并解释每一部分

    52120

    Ajax之一 简介篇

    Ajax的主要思想是使Web页可以在后台(或者说是异步的)发送HTTP请求,而不需要重新读取整个页面(用Asp.Net的话来说,就是不需要往返行程或回发)。...Asp.Net AJAX的目的就是尽量避免编写冗余的的代码以及将客户端开发人员的经验与Asp.Net2.0(3.5)开发人员的经验结合起来;另外将OOP的可以提高效率的优点带到JavaScript中。...就像Asp.Net可以帮你管理HTTP的功能那样,Asp.Net AJAX也可以管理Ajax的功能,比如回发、状态管理以及使Asp.Net正常运转所需要的那些客户端脚本等。 ​...Asp.Net页面可以使用整页回发或异步请求这两种方式来完成不同的任务。...项目二:建立没有AJAX的简单的Asp.Net页面 1.在项目一的基础上,需要添加两个服务器控件:一个是标签控件Label2,一个是按钮控件Button2。

    8810

    ASP.NET MVC 5– 使用Wijmo MVC 5模板1分钟创建应用

    在 Web 选项卡中,您可以发现Wijmo。 ? ? 在创建的Views|Shared下,打开_Layout.cshtml。模板中添加了一些菜单、按钮、复选框、简单的输入框等Wijmo控件。...单击Add,Visual Studio将生成所有需要的东西。 Scaffolding将会自动生成控制器和增删改查应用程序所需要的所有视图。...我们可以通过“Lists|Add List”按钮添加计划。 ? 填写完成后,点击Create,进入Index页面。 ? 现在我们就完成了具有增删改查功能的MVC5应用程序。...ASP.NET MVC 5 - 将数据从控制器传递给视图 5. ASP.NET MVC 5 - 添加一个模型 6. ...ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view) 9. ASP.NET MVC 5 - 给电影表和模型添加新字段 10.

    2.4K80

    第1章 ASP.NET4.0开发技术概述

    静态网页在制作完成并发布后,网页的内容(包括文本、图像、声音和超链接等)和外观是保持不变的,即任意一个浏览者,在任意时间、以任意方式访问这个网页时,该网页总保持不变的外观。...简述服务器端动态网页技术的工作流程。 具体流程如下: ① 浏览者在客户端浏览器地址栏中输入一个HTTP请求,该请求通过网络从浏览器传送到Web服务器中。 ② Web服务器在服务器中定位指令文件。...①“设计”视图:用于设计应用程序的界面。 ②“源”视图:用于编辑程序代码。 ③“拆分”视图:将“设计”视图和“源”视图融合在一起并同步显示。...如果右键单击工具箱,在弹出的菜单中选择【选择项】命令,就会弹出【选择工具箱项】对话框,从中可以为工具箱添加其他的一些可选控件。 5. 叙述创建ASP.NET应用程序的一般步骤。...创建ASP.NET应用程序的一般步骤如下: (1)创建Web项目或网站,并添加网页文件。 (2)布局界面,在网页中添加控件,并设置控件属性。 (3)编写网页功能代码。 (5)调试和运行程序。

    1.5K20
    领券