xieon1986 2013-10-14 11:02 采纳率: 0%
浏览 1631

ajax AccordionPane后台添加后为什么客户端显示的样式是隐藏的

代码如下:
aspx页面:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



无标题页






cs页面:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.OracleClient;
using DataCommon;
using AjaxControlToolkit;

public partial class test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{

        initAccordion();
        return;
    }
}
public void initAccordion()
{

    DataTable dtart = GetArtTypeable();
    BindAccordion(Accordion_Left, dtart);
    //DataTable dtdoc = GetDocTypeTable();
    //BindAccordion(Accordion_Left, dtdoc);


}

public void BindAccordion(Accordion AccordionID, DataTable dt)
{
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        if (dt.Rows[i]["parentcode"].ToString() == "0")
        {
            AccordionPane ap = new AccordionPane();
            //ap.CssClass = "mina_left_content";
            ap.ID = "ApMenu_" + dt.Rows[i][0].ToString();
            Label lblMenu = new Label();
            lblMenu.ID = dt.Rows[i][0].ToString();
            lblMenu.Text = dt.Rows[i][1].ToString();
            lblMenu.CssClass = "mina_left_content";
            ap.HeaderContainer.Controls.Add(lblMenu);
            AccordionID.Panes.Add(ap);                  //创建知识类型根节点
        }
        else
        {
            AccordionPane ap = new AccordionPane();
            //ap.CssClass = "mina_left_content";
            ap.ID = "ApMenu_" + dt.Rows[i][0].ToString();
            HyperLink hlMenu = new HyperLink();
            hlMenu.ID = dt.Rows[i][0].ToString();
            hlMenu.Text = dt.Rows[i][1].ToString();
            //hlMenu.CssClass 
            ap.ContentContainer.Controls.Add(hlMenu);
            //hlMenu.NavigateUrl = dt.Rows[i]["ContentUrl"].ToString();
            AccordionID.Panes.Add(ap);                  //创建知识类型根节点
        }
    }
}

public DataTable GetArtTypeable()
{
    OracleConnection conn = new OracleConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["OracleConnectionString"].ConnectionString.ToString());
    string cmdText = "Select * from  ZS_ARTICLETYPE where isactive='1' order by PARENTCODE,orderid";
    OracleDataAdapter cmd = new OracleDataAdapter(cmdText, conn);//从数据库抓出数据
    DataSet ds = new DataSet();
    cmd.Fill(ds, "ZS_ARTICLETYPE");
    string sss = ds.Tables["ZS_ARTICLETYPE"].Rows.ToString();
    return ds.Tables["ZS_ARTICLETYPE"];
}

public DataTable GetDocTypeTable()
{
    OracleConnection conn = new OracleConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["OracleConnectionString"].ConnectionString.ToString());
    string cmdText = "Select * from  zs_documenttype where isactive='1' order by PARENTCODE,orderid";
    OracleDataAdapter cmd = new OracleDataAdapter(cmdText, conn);//从数据库抓出数据
    DataSet ds = new DataSet();
    cmd.Fill(ds, "zs_documenttype");
    string sss = ds.Tables["zs_documenttype"].Rows.ToString();
    return ds.Tables["zs_documenttype"];
}

}

输出结果
生成的Accordion菜单 子菜单项显示的div样式居然是style="display:none;"
求高手解答。。。。

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-08-20 17:04
    关注

    该回答引用ChatGPT-3.5,仅为您供参考,不保证完全正确
    看起来你正在使用 ASP.NET AjaxControlToolkit 创建一个手风琴式菜单,但是你遇到的问题是子菜单项显示的样式带有 "display:none;" 的属性。这可能与你在代码中如何将子菜单项添加到 AccordionPane 的 ContentContainer 有关。


    "display:none;" 样式表示元素被隐藏了。这个问题可能与你在 AccordionPane 的 ContentContainer 中设置 HyperLink 控件的方式有关。


    以下是解决问题的建议:

    1. 更新 HyperLink 创建

      不要直接将 HyperLink 控件添加到 ContentContainer 中,而是创建一个新的 Panel,将 HyperLink 添加到 Panel,然后将 Panel 添加到 ContentContainer 中。这样,AccordionPane 就会正确地呈现子菜单项。

      修改你的 BindAccordion 方法中的 else 部分,如下所示:

      else
      {
          AccordionPane ap = new AccordionPane();
          ap.ID = "ApMenu_" + dt.Rows[i][0].ToString();
          
          Panel panel = new Panel();
          HyperLink hlMenu = new HyperLink();
          hlMenu.ID = dt.Rows[i][0].ToString();
          hlMenu.Text = dt.Rows[i][1].ToString();
          
          panel.Controls.Add(hlMenu);  // 将 HyperLink 添加到 Panel
          ap.ContentContainer.Controls.Add(panel);  // 将 Panel 添加到 ContentContainer
          
          AccordionID.Panes.Add(ap);  // 将 AccordionPane 添加到 Accordion
      }
      

      通过将 HyperLink 封装在 Panel 中,然后将 Panel 添加到 ContentContainer,可能会解决渲染问题。

    2. 移除不必要的 CSS 类

      你已经注释掉了在代码中的 CSS 类赋值,例如 //ap.CssClass = "mina_left_content";。如果这些 CSS 类对于样式化你的手风琴菜单很重要,确保你正确地应用它们。你应用的 CSS 类不应与手风琴的默认样式冲突。

      确保你的 CSS 类和样式与 Accordion 控件及其子元素的结构兼容。

    3. 调试

      如果问题仍然存在,尝试使用浏览器开发者工具检查渲染页面的生成 HTML 源代码。这将帮助你了解实际的 HTML 结构和应用的样式。你还可以在 C# 代码中添加断点或调试输出,以确保正确的控件被添加到 AccordionPane 的 ContentContainer 中。

    4. 更新到最新的控件工具包

      确保使用最新版本的 AjaxControlToolkit 库,因为更新的版本可能会有 bug 修复和改进。

    请记住,ASP.NET WebForms 和第三方控件库有时可能会以意想不到的方式行为。通过调试、测试和验证每个步骤,有助于识别和解决像你遇到的问题。


    该回答引用NewBing,仅为您供参考,不保证完全正确
    根据我从网络上搜索到的信息,您的问题可能是由于您没有设置Accordion控件的SelectedIndex属性导致的。SelectedIndex属性用于指定Accordion控件中当前显示的AccordionPane控件的索引。如果您不设置这个属性,那么默认情况下,Accordion控件会隐藏所有的AccordionPane控件,只有当用户点击某个AccordionPane的HeaderContainer时,才会显示该AccordionPane的ContentContainer。¹


    为了解决您的问题,您可以在后台代码中动态地设置SelectedIndex属性,例如:

    //假设您想要显示第一个AccordionPane
    AccordionID.SelectedIndex = 0;
    

    或者,您也可以在前台代码中使用SelectedIndex属性来指定要显示的AccordionPane,例如:

    <ajaxToolkit:Accordion ID="acc1" runat="server" HeaderCssClass="header" ContentCssClass="content" Width="300px" FadeTransitions="true" SelectedIndex="0">
      <!--这里添加您的AccordionPane控件-->
    </ajaxToolkit:Accordion>
    

    源: 与必应的对话, 2023/8/20
    (1) Dynamically Adding An Accordion Pane (C#) | Microsoft Learn. https://learn.microsoft.com/en-us/aspnet/web-forms/overview/ajax-control-toolkit/accordion/dynamically-adding-an-accordion-pane-cs.
    (2) Dynamically Adding An Accordion Pane (C#) | Microsoft Learn. https://learn.microsoft.com/en-us/aspnet/web-forms/overview/ajax-control-toolkit/accordion/dynamically-adding-an-accordion-pane-cs.
    (3) Accordion Sample - DevExpress. https://ajaxcontroltoolkit.devexpress.com/Accordion/Accordion.aspx.

    评论

报告相同问题?

悬赏问题

  • ¥50 comsol稳态求解器 找不到解,奇异矩阵有1个空方程返回的解不收敛。没有返回所有参数步长;pid控制
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功