如何对动态创建控件进行验证以及在Ajax环境中的使用

首先给一个常规的动态创建控件,并进行验证的代码

[前端aspx代码]

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
      
        <asp:Table ID="Table1" runat="server">
        </asp:Table>
        <asp:Button ID="btnAddControl" runat="server" Text="动态创建控件" OnClick="btnAddControl_Click" />  
    <asp:Button ID="btnValidator" runat="server" Text="验证动态控件" Enabled="false" />
    
    </form>
</body>
</html>

[后端Cs代码]

using System;
using System.Data;
using System.Configuration;
using System.Collections;
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;

public partial class Test : System.Web.UI.Page
{
    private void Page_Load(object sender, System.EventArgs e)
    {
        
    }


    protected void btnAddControl_Click(object sender, EventArgs e)
    {        
        TextBox _TxtBox = new TextBox();//动态创建一个TextBox
        _TxtBox.ID = "TextBox1"; 
       
        RequiredFieldValidator _Require = new RequiredFieldValidator();//动态创建一个验证控件
        _Require.ErrorMessage = "请输入";
        _Require.SetFocusOnError = true;
        _Require.ControlToValidate = _TxtBox.ID;      
 
        TableCell Cell = new TableCell();
        Cell.Controls.Add(_TxtBox);
        Cell.Controls.Add(_Require);//将刚才创建的二个控件,加入Cell

        TableRow Row = new TableRow();
        Row.Controls.Add(Cell);
        this.Table1.Rows.Add(Row);

        btnValidator.Enabled = true;
    }
}


运行测试,点击"动态创建控件"后,再点击"验证动态控件",验证控件起作用了,一切正常

接下来,我们加入Ajax环境[加入UpdatePanel控件],将前端代码改为:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
       <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        
<asp:UpdatePanel ID="UpdatePanel1" runat="server" >
    <ContentTemplate>
        <div style="border:solid 2px red"> <%--为突出显示,把UpdatePanel加了一个红色框--%>
        <asp:Table ID="Table1" runat="server">
        </asp:Table>
        <asp:Button ID="btnAddControl" runat="server" Text="动态创建控件" OnClick="btnAddControl_Click" />
       </div>
</ContentTemplate>
</asp:UpdatePanel>
    
    
      <asp:Button ID="btnValidator" runat="server" Text="验证动态控件" Enabled="true" />
    
    </form>
</body>
</html> 

再次运行,发现没办法再对动态生成的控件进行验证了(也就是说,新创建的验证控件没起作用) ,怎么办呢?难道就这样放弃?经过一番尝试,发现了一个很有趣的解决办法,具体参看以下代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
       <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        
<asp:UpdatePanel ID="UpdatePanel1" runat="server" >
    <ContentTemplate>
        <div style="border:solid 2px red"><%--为突出显示,把UpdatePanel加了一个红色框--%>
        <asp:Table ID="Table1" runat="server">
        </asp:Table>
        <asp:Button ID="btnAddControl" runat="server" Text="动态创建控件" OnClick="btnAddControl_Click" />
       </div>
</ContentTemplate>
</asp:UpdatePanel>
    
    
  <div style="display:none">
        <asp:TextBox ID="_TxtNeverUsed" runat="server" Text="*"></asp:TextBox>
        <asp:RequiredFieldValidator ID="_RequireNeverUsed" runat="server" ErrorMessage="*" ControlToValidate="_TxtNeverUsed"></asp:RequiredFieldValidator>
    </div>
    <asp:Button ID="btnValidator" runat="server" Text="验证动态控件" Enabled="true" />
    
    </form>
</body>
</html>


注意上面蓝色的代码,再次运行,哈哈,居然可以了!

时间: 2025-01-21 09:17:33

如何对动态创建控件进行验证以及在Ajax环境中的使用的相关文章

泛型-c# 动态创建控件 及触发事件 即插即用。

问题描述 c# 动态创建控件 及触发事件 即插即用. 各大大好,初来驾到,请大家多多关照,问题是这样的.需求 :需要动态添加控件.然后需要项目做出来后要实现"即插即用"的特点.(即插即用:我们要是更新一个功能,用户只要更新这个控件就可以直接使用,而不用更新整个客服端)问题 :知道要用泛型来写,但是看了一天了,不知道如何下手,现已写了如下代码:using System;using System.Collections.Generic;using System.Linq;using Sys

在.NET上如何根据字符串动态创建控件

创建|动态|控件|字符串   在.Net上用字符串动态创建控件是通过反射来实现. 首先,利用System.Type.GetType方法,获得字符串中指定的控件的类型实例. 这里需要注意这个字符串的语法,根据msdn的解释: 按名称和签名隐藏会考虑签名的所有部分,包括自定义修饰符.返回类型.参数类型.标记和非托管调用约定.这是二进制比较. 对于反射,属性和事件按名称和签名隐藏.如果基类中有同时带 get 访问器和 set 访问器的属性,但派生类中仅有 get 访问器,则派生类属性隐藏基类属性,并且

动态创建控件支持事件响应并可保存与读取

VC++6.0中创建动态控件是比较偏离基础的知识,也有一定的难度.它的完整功能是要动态创建控件后再动态响应控件中的事件,两者全部做到才算完整. 这里我将展示一个完整的动态控件示例,它可以动态创建控件,然后再动态响应控件事件,并可以保存控件信息至ini配置文件,然后再根据ini文件读取出控件信息来动态创建控件.相信它能够解决你在动态控件中所遇到的许多问题. 当然,动态控件的方法有许多种,我展示的只是给我认为较好的. 这里以VC++6.0创建对话框工程为例,添加菜单,分别添加子项按钮,文本框,标签.

ASP.NET动态创建控件之绝境求生

在ASP.NET中动态创建一个控件总是不那么顺利,特别是当对页面的Life Cycle不是那么了然的情况下!这里简单描述一下要求,然后提供一个解决方案,大家看看有没有更好的Idea,如果有的话就是我的大幸了,呵呵! 要求:页面上有一个Add按钮,每点击一次该按钮,页面上动态创建一个WebPartZone! 提醒:WebPartZone只能在OnInit或之前才能创建,否则报异常! 大家都知道,按钮的点击事件是在RaisePostbackEvent时触发的,这意味着点击事件在OnLoad阶段之后才

dll动态库-MFC 动态创建控件不响应消息

问题描述 MFC 动态创建控件不响应消息 按照工程的要求,我必须建立一个类(动态链接库中),这个类是从CWnd派生的,里面的控件全部要求动态生成,而我这个类会作为一个Dialog的成员变量. 目前动态创建控件可以实现,但是控件却不响应消息,我认为是消息只在Dialog中,没法传到其成员变量中,不知道是不是这个原因--请大神帮忙! 我做了一个很简单的程序,请大神帮忙分析一下,灰常灰常感谢~ 解决方案 // MFCApplication1Dlg.h : 头文件 protected: CTestWnd

请问lotus如何动态创建控件

问题描述 在开发的过程中,小弟有几个疑问,希望大家能帮帮:1.在lotus里(C/S)能否动态创建控件,如按纽,热点连接等,还要能点击后传值给相应的表单,在另一个表单里能获取传值,像b/s里的连接一样2.点击表单,弹出自定义的子表单,在子表单里填写相应的内容,然后传值到父表单里.以上两个问题,希望高手能帮忙解答下,最好有代码示例,谢谢 解决方案 解决方案二:怎么没人,很急啊解决方案三:我没实现过这样的.为什么会有这样的需求呢?解决方案四:因为我们现在有个这样的需求,假如某个员工的档案,有几个表,

如何实现 ABAP 动态创建控件?

问题描述 想做个联立表搜索的程序,想问下如何实现动态创建控件?类似SE16的,不过那个guifunction不是很懂,想问下有人了解么?

MFC中动态创建控件以及事件响应实现方法_C 语言

本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示时,其上的控件也会显示. 静态控件不需要调用Create()

在ASP.NET2.0下动态创建控件,并能保持保持其状态,能获取其值的问题。

问题描述 在ASP.NET2.0下动态创建控件,并能保持保持其状态,能获取其值.在1.1下重载PageState,SaveViewState,LoadViewState等属性方法可以实现,在2.0下好多都无法实现.请教各位可有什么好的方法. 解决方案 解决方案二:属性用ViewState保存,都可以持久化的啊解决方案三:我动态生成那么多控件,难道都的手动ViewState保存??