- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
有人知道控件的 UniqueId 是什么时候分配的吗?
现在我的 Page_Init 中有一些基于 UniqueId 的代码。但是,根据某些业务逻辑,我可能需要在此之前重新安排页面的控件层次结构。
所以,我的主要问题是,何时分配 UniqueId?我是否可以重新安排 Page_PreInit() 中的层次结构,以便当我的代码在 Page_Init() 中触发时,我将分配正确的 UniqueId?
最佳答案
为了回答这个问题,我写了一个小的代码隐藏,它记录了每个事件的控件的 UniqueID 属性值:
例如,最后一个事件处理程序如下所示:
protected void Page_PreRenderComplete(object sender, EventArgs e)
{
_uniqueIdValues.Add(
new Tuple<string, string>("PreRenderComplete", MyControl.UniqueID));
}
然后,我在 Unload 事件中设置断点并使用 Visual Studio 的即时窗口打印出记录的值:
_uniqueIdValues.ToArray()
{System.Tuple<string,string>[8]}
[0]: {(PreInit, MyControl)}
[1]: {(Init, MyControl)}
[2]: {(InitComplete, MyControl)}
[3]: {(PreLoad, MyControl)}
[4]: {(Load, MyControl)}
[5]: {(LoadComplete, MyControl)}
[6]: {(PreRender, MyControl)}
[7]: {(PreRenderComplete, MyControl)}
似乎每个事件的 UniqueID 都设置为字符串“MyControl”(实际上是我在 ASPX 标记中为控件指定的 ID 属性)。看起来 @Rewinder 来自 MSDN 的回答是正确的。这些是在触发任何 ASP.NET 页面级事件之前设置的。
编辑:
如果我们查看 System.Web.UI.Control 的 .NET 3.5 引用源 (http://referencesource.microsoft.com/),我们可以看到 UniqueID 的返回值是在访问属性时计算的. UniqueID 属性如下所示:
public virtual string UniqueID {
get {
if (_cachedUniqueID != null) {
return _cachedUniqueID;
}
Control namingContainer = NamingContainer;
if (namingContainer != null) {
// if the ID is null at this point, we need to have one created and the control added to the
// naming container.
if (_id == null) {
GenerateAutomaticID();
}
if (Page == namingContainer) {
_cachedUniqueID = _id;
}
else {
string uniqueIDPrefix = namingContainer.GetUniqueIDPrefix();
if (uniqueIDPrefix.Length == 0) {
// In this case, it is probably a naming container that is not sited, so we don't want to cache it
return _id;
}
else {
_cachedUniqueID = uniqueIDPrefix + _id;
}
}
return _cachedUniqueID;
}
else {
// no naming container
return _id;
}
}
}
并且,当命名容器更改时调用以下方法。 ClearCachedUniqueIDRecursive 方法重置 _cachedUniqueID 字段的值,以便在下次调用 UniqueID 属性时重新生成它。
private void UpdateNamingContainer(Control namingContainer) {
// Remove the cached uniqueID if the control already had a namingcontainer
// and the namingcontainer is changed.
if (_namingContainer != null && _namingContainer != namingContainer) {
ClearCachedUniqueIDRecursive();
}
_namingContainer = namingContainer;
}
关于c# - Control.UniqueId 是什么时候创建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5472874/
我在表“main”中有一个列“ProviderName”,填充如下: Alaska Medicaid Arizona Medicaid Arkansas Medicaid California Med
我正在生成一个 OrderId,它应该由 yyMMddhhmmssMs 组成,这个 orderId 表示 Orders 表的主键字段。 我生成订单 ID 的方式如下: import java.text
MailKit.Net.Imap 有 MoveTo(...)。但是如果我们移动消息,消息将获得新的 UniqueID(因为它在文件夹中是唯一的)。如何获取消息的新 UniqueID? 最佳答案 采用
每 Item (例如 Task )在 Exchange Web 服务 (EWS) 托管 API 中有一个 Id类型的属性 ItemId ,然后有一个 String属性命名 UniqueId (继承自
我正在尝试通过列表项的 REST API 端点通过其唯一 ID 获取列表项。 网址 https://{site-collection}/{personal-site}/_api/Web/Lists(g
我有一个定义如下的表: mysql> select * from rules; +----+----------+-------+--------------+---------------+----
如果我的页面中有现有的 HTML: foo 然后我运行 JS 代码: $('bar').appendTo('body').uniqueId(); 然后,新的 p 元素获得 ID ui-id-1。我
我正在使用 C# 在 .NET Framework 中开发一个 Windows 应用程序。我想知道制造的每台计算机是否有任何唯一 ID,让它由任何制造商制造,但它必须是唯一的。 谢谢,比布 最佳答案
在谷歌搜索没有结果后,我会问我的问题: Mailkit.UniqueId 是什么? 在结构的元数据中只是读取 Represents a unique identifier for messages i
应该是一个简单的答案,可能是我的语法不正确,因为我是 ReactJS 的新手。我想指定一个唯一的 ID 作为键。 这会引发错误: rows:{ uniqueId() : { name:"Kitch
我正在映射多个单选按钮(组)选项,当用户单击单选按钮时,我想将选定的值和 uniqueIds 添加到数组中。 使用我当前的代码,我可以获得我当前单击但无法添加到数组的值。 {result !== nu
在应用程序中,当创建特殊类型的对象时,我需要为它们中的每一个生成一个唯一标识。这些对象是通过工厂创建的,并且很有可能在“批量”操作中创建。我意识到框架中的“随机”毕竟不是那么“随机”,所以我尝试按如下
一个大问题是我不是一个程序员…所以我需要用我自己能力范围内的方法来解决这个问题…我会很高兴得到帮助! 我有一个问题,谷歌索引中有很多重复的网址,有强烈的迹象表明,这是造成搜索引擎优化问题。 我没有网站
有人知道控件的 UniqueId 是什么时候分配的吗? 现在我的 Page_Init 中有一些基于 UniqueId 的代码。但是,根据某些业务逻辑,我可能需要在此之前重新安排页面的控件层次结构。 所
我需要一个即使在库中打开版本控制时也是唯一的值。我应该调用其他属性吗? 最佳答案 spListItem 类有一个版本对象,其中包含该对象的所有版本。每个SPListItemVersion具有 Vers
控件的 UniqueID 用 '$' 分隔,分隔符是否可以更改,如果可以,是否有包含分隔符的属性? 最佳答案 鉴于有 protected属性(property) IdSeparator 和 Clien
似乎 jquery ui 已加载,因为当我运行时 $(function(){ // did the UI load? console.log($.ui.version)
尝试使用lodash (版本4.17.11) _.uniqueId() 始终返回 1,而不是随机的 3 位数。 此外,_.uniqueId('prefix') 始终返回 prefix1。 有问题吗?
我正在学习 RavenDB 并熟悉其工作原理。我不明白的一件事是如何将乌鸦创建的 ID 保存到属性中。 public class User { public string FirstName
我正在尝试为 Android 手机和平板电脑生成一个唯一 ID。我发现了一个有趣的功能,但对于我全新的 galaxy tab 2,它不起作用。这是我的功能: public String generat
我是一名优秀的程序员,十分优秀!