众所周知在Asp.net中如果一个页面添加了一个用户控件(或母版页),那么用户控件内的控件的   ClientID号会被自动添加页面中用户控件的ClientID

即页面中的控件内的控件ClientID=用户控件id号+"_"+用户控件内控件的id号

说的太绕了,还是看下例子吧
在一个asp.net页面index.aspx中添加了一个head.ascx用户控件id号为"head1"
head.ascx控件中有一个input#hid_name控件
那么index.aspx最终生成的input的id为"head1_hid_name"
MS为什么要这样设计?
主要是asp.net中所有的控件都有一个唯一的id号(包括ClientID),当页面回发时.net可以通过该id号来进行回发后的后续处理
而如果一个页面中包含了多个用户控件,有可能一个用户控件中的id号是唯一的,但当合并到一个页面中的时候就有可能导致会出现重复的id号
所以asp.net就会在每个用户控件中的id前添加该用户控件的id,这样在一个页面中就不会出现重复的id号(一个页面如果出现重复的id号是编译通过的)
 
解决方案:
因为某些原因我们可能需要使用真正的用户控件中的控件id
如已经写好的js事件,css样式等
所以我们需要恢复原来的控件id号,有以下方案
1.修改现在的js文件和css文件使用class来进行处理,但这种方式太不靠谱
2.写一个js文件将asp.net生成的id号替换成掉用户控件id号,在每个使用的页面中引用即可
如果有回发需求可以在回发之前恢复asp.net生成的clientid号这样就不会影响asp.net的回发处理
//htl add 2014-12-25
//页面中用户控件的id号
var _id = 'details1_';
//将用户控件中的控件id中的用户控件id替换掉
jQuery("[id*=" + _id + "]").each(function($) {
$(this).attr("id", $(this).attr("id").replace(_id, ""));
//添加自定义属性,用于在回发之前恢复asp.net生成的id号
$(this).attr('usercontrol', '');
});
//在回发之前恢复asp.net生成的id号
jQuery("form").submit(function() {
jQuery("[usercontrol]").each(function() {
$(this).attr("id", _id + $(this).attr("id"));
});
});

3.在asp.net页面中通过代码进行替换,此方式将导致在回发时会无法找到对应的控件id而导致无法找到真正的控件而影响业务处理

/// <summary>
/// htl add 2014-12-25
/// 恢复用户控件中控件的ClientID号
/// 原因是在页面中调用用户控件时,用户控件里的控件的ClientID会被自动添加用户控件id
/// </summary>
/// <param name="writer"></param>
protectedoverridevoidRender(HtmlTextWriter writer) {
System.IO.StringWriter sw = newSystem.IO.StringWriter();
base.Render(newHtmlTextWriter(sw)); //获取正常输出的html,包含__VIEWSTATE
//过滤掉该控件的ClientID号恢复用户控件内的控件的ClientID
//注意过滤掉后会导致在回发时无法找到真正的控件
writer.WriteLine(Web.PageHelp.RegexStr(@details1.ClientID + "_", sw.ToString()).Trim());
}
参考:
 

Asp.net 恢复页面内用户控件内的控件ClientID的更多相关文章

  1. ASP.NET中页面加载时文本框(texbox控件)内有文字获得焦点时文字消失

    代码如下: <asp:TextBox ID="TextBox1" runat="server" Height="26px" MaxLe ...

  2. ASP.NET MVC页面UI之联动下拉选择控件(省、市、县联动选择)

    地区选择操作在WEB应用中比较常见的操作,本文在.net mvc3下实现了省市县三级联动选择功能. 本文博客出处:http://www.kwstu.com/ArticleView/admin_2013 ...

  3. ASP.NET MVC加载用户控件后并获取其内控件值或赋值

    有网友看了这篇<ASP.NET MVC加载ASCX之后,并为之赋值>http://www.cnblogs.com/insus/p/3643254.html 之后,问及Insus.NET,不 ...

  4. ASP.NET MVC 中使用用户控件——转

    讲讲怎么在 ASP.NET MVC2中使用用户控件.首先我们新建一个用户控件,   我们命名为SelectGroup.ascx,代码如下 <%@ Control Language="C ...

  5. 在asp.net页面上按回车会触发Imagebutton控件的Click事件

    原文:在asp.net页面上按回车会触发Imagebutton控件的Click事件 问题: 用asp.net做的aspx页面,无论是否有文本框.下拉框.复选框……获得焦点,只要在当前页面上按一下回车就 ...

  6. 客户端的javascript改变了asp.net webform页面控件的值,后台代码中如何获取修改后的值。

    客户端的javascript改变了asp.net webform页面控件的值,后台代码中如何获取修改后的值.     无论是什么的html控件,只要加上了runat="server" ...

  7. ASP.NET关于Login控件使用,LoginView 控件,CreateUserWizard 控件

    原文:ASP.NET关于Login控件使用,LoginView 控件,CreateUserWizard 控件 Login控件它是属于Membership服务的一部分,必须配置Membership提供程 ...

  8. 027. asp.net中数据绑定控件之 GridView控件

    GridView控件支持下面的功能: 绑定至数据源控件, 如SqlDataSource 内置排序功能 内置更新和删除功能 内置分页功能 内置行选择功能 可以编程方式访问GridView对象模型以动态设 ...

  9. 《ASP.NET1200例》ListView 控件与DataPager控件的结合<二>

    ASP.NET使用ListView数据绑定控件和DataPager实现数据分页显示 为什么使用ListView+DataPager的方式实现分页显示? .net提供的诸多数据绑定控件,每一种都有它自己 ...

随机推荐

  1. IO编程

    1.文件读写 >>>f = open('/Users/michael/test.txt', 'r') >>> f.read() 'Hello, world!' &g ...

  2. ASP.net jQuery调用webservice返回json数据的一些问题

    之前寒假时,试着使用jQuery写了几个异步请求demo, 但是那样是使用的webform普通页面,一般应该是用 webservice 居多. 最近写后台管理时,想用异步来实现一些信息的展示和修改, ...

  3. Centos7(Firewall)防火墙开启常见端口命令

    使用云服务器的,一定要注意开启安全组配置的响应端口 Centos7默认安装了firewalld,如果没有安装的话,则需要YUM命令安装:firewalld真的用不习惯,与之前的iptable防火墙区别 ...

  4. 家谱(gen)

    家谱(gen) 时间限制  2S [问题描述]     现代的人对于本家族血统越来越感兴趣,现在给出充足的父子关系,请你编写程序找到某个人的最早的祖先. [输入格式]gen.in 输入文件由多行组成, ...

  5. BZOJ 1975: [Sdoi2010]魔法猪学院 大水题 第k短路 spfa

    https://www.lydsy.com/JudgeOnline/problem.php?id=1975 我好像到现在了第k短路都不会写,mdzz. 先spfa求出最短路,然后扫点存各种前置路径已经 ...

  6. hdu 5317 RGCDQ (2015多校第三场第2题)素数打表+前缀和相减求后缀(DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5317 题意:F(x) 表示x的不同质因子的个数结果是求L,R区间中最大的gcd( F(i) , F(j ...

  7. pygame系列_pygame安装

    在接下来的blog中,会有一系列的文章来介绍关于pygame的内容,所以把标题设置为pygame系列 在这篇blog中,主要描述一下我们怎样来安装pygame 可能很多人像我一样,发现了pygame是 ...

  8. 快速定位问题 Request无法获取参数

    比如说最近开发甲修改了iframe标签的src,开发乙在设置src的时候传入了2个参数,通过iframe标签链接到这个页面时,开发乙调试时发现没有拿到任何参数值.然后开发乙百度了一下,发现iframe ...

  9. .Net 中DataTable和 DataRow的 区别与联系

    1.简要说明二者关系 DataRow 和 DataColumn 对象是 DataTable 的主要组件.使用 DataRow 对象及其属性和方法检索.评估.插入.删除和更新 DataTable 中的值 ...

  10. Android intent action大全

    android.intent.action.ALL_APPSandroid.intent.action.ANSWERandroid.intent.action.ATTACH_DATAandroid.i ...