首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MenuItem的ClientID

MenuItem的ClientID
EN

Stack Overflow用户
提问于 2011-12-08 14:29:23
回答 7查看 2.7K关注 0票数 4

我在一个页面上有一个项目,它有一系列的MenuItems (从数据库动态生成)作为菜单项。

每个MenuItem将其自身呈现为

代码语言:javascript
复制
<a class="ctl00_cphContent_cphMainContentTitle_uxHeaderMenu_menuPageNav_1 button ctl00_cphContent_cphMainContentTitle_uxHeaderMenu_menuPageNav_3" style="border-style:none;font-size:1em;" href="SomeURLHere.aspx">

然而,我想得到这个链接的ClientID (我们使用外部Javascript库在模式灯箱样式框架中弹出页面)。这样做的一个要求是,我们需要识别“可点击对象ID”,以便我们可以将其设置为能够在单击时触发事件。

我们网站上的其他地方都有

代码语言:javascript
复制
OurSite.SetupDialogueBoxForOpen('<%= HyperLink.ClientID =>');

但是,由于某些原因,菜单项似乎没有分配给它的ClientID属性。这使得在JavaScript中设置客户端id几乎是不可能的。

有人知道如何获取菜单项的ClientID吗(只是为了说明一下,菜单项的类型是System.Web.UI.WebControls.MenuItem

提前感谢!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-12-20 06:33:41

如果要更改控件中项的呈现方式,可以使用StaticMenuItemTemplateDynamicMenuItemTemplate属性。我将只在我的示例中使用第一个(静态,用于顶级项):

代码语言:javascript
复制
<asp:Menu runat="server" ...>
  <StaticMenuItemTemplate>
    <a id="<%# GetSuitableClientId(Container) %>"><%# Eval("Text") %></a>
  </StaticMenuItemTemplate>
</asp:Menu>

StaticMenuItemTemplate属性属于ITemplate类型,并且像通常的模板属性一样,它由TemplateContainer属性修饰。这指定了要在其中实例化模板的容器,通常该容器提供对呈现时可能需要的一些上下文的访问。在本例中,它的类型是MenuItemTemplateContainer,它实现了IDataContainer,因此提供了对数据项的访问。

因此,我们将这个容器传递回页面中的一个方法,并在该方法中构造一个我们认为合适的ID。我们可以使用数据项来表示深度,使用容器来表示索引,例如:

代码语言:javascript
复制
protected string GetSuitableClientId(MenuItemTemplateContainer container)
{
  MenuItem item = (MenuItem)container.DataItem;
  return String.Format("menuItem-{0}-{1}", item.Depth, container.ItemIndex);
}

我的猜测是,现在可以调整JavaScript以绑定到<a id="menuItem-2-4">Text</a>元素上的单击事件,因为您现在有了可预测的客户端in。

编辑:您还可以在模板中使用以下内容,并让ASP.NET负责创建唯一的客户端ID,但这是不可预测的……

代码语言:javascript
复制
<asp:HyperLink ID="MenuItem" runat="server" NavigateUrl='<%# Eval("NavigateUrl") %>' />
票数 3
EN

Stack Overflow用户

发布于 2011-12-08 15:00:57

尝试此操作,更改selector $("menu > a").bind('click',function(){}));

票数 1
EN

Stack Overflow用户

发布于 2011-12-16 20:56:58

如何获得DOM中每个锚标记的列表并遍历它们,查找.class直到找到class=="whatever_Nav_ID_or_flag_you_entered_or_somehow_can_tell_this_element_apart“,然后使用.id为其分配id呢?类似于:未经测试

代码语言:javascript
复制
var anchors = document.getElementsByTagName("a");
for(int i = 0; i < anchors.length()){
    if(anchors[i].class=="testClass"){
        anchors[i].id = "targetThisAnchor";
        break;
    }
}

编辑:在渲染过程中,你可以使用一个条件来查看新的菜单项是否是你正在寻找的菜单项?

代码语言:javascript
复制
<%
  if (MenuItem.flag == menuItemToTarget)
  {
      //set MenuItem id
  }
%>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8427086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档