0

私はC#Webフォームアプリケーションに取り組んでおり、顧客番号と注文タイプに基づいて、顧客が表示できるメニューに関する情報を収集するデータレイヤーを持っています。

qa部門が、ホバーではなくクリックで展開するようにメニューを変更するように要求するまで、私はこれにASP.NETメニューコントロールを使用していました。その時点で、より単純なcss / html / jqueryアプローチでメニューを試してみることにしましたが、問題が発生しました。

メニューの情報を取得してXMLとして返す次のメソッドがデータレイヤーにあります。私が立ち往生しているのは、メニューコントロールを使用していたときに、収集されていたXMLを取得し、できればそれをULに再フォーマットして、やりたいhtml/cssアプローチで使用する方法です。

public static string BuildMenu(string cprcstnm, string docType)
    {
        DataSet ds = new DataSet();
        string connStr = ConfigurationManager.ConnectionStrings["DynamicsConnectionString"].ConnectionString;
        using (SqlConnection conn = new SqlConnection(connStr))
        {
            string sql = "usp_SelectItemMenuByCustomer";
            SqlDataAdapter da = new SqlDataAdapter(sql, conn);
            da.SelectCommand.CommandType = CommandType.StoredProcedure;
            da.SelectCommand.Parameters.Add("@CPRCSTNM", SqlDbType.VarChar).Value = cprcstnm;
            da.SelectCommand.Parameters.Add("@DOCID", SqlDbType.VarChar).Value = docType;
            da.Fill(ds);
            da.Dispose();
        }
        ds.DataSetName = "Menus";
        ds.Tables[0].TableName = "Menu";
        DataRelation relation = new DataRelation("ParentChild",
                                                 ds.Tables["Menu"].Columns["MenuID"],
                                                 ds.Tables["Menu"].Columns["ParentID"],
                                                 false);

        relation.Nested = true;
        ds.Relations.Add(relation);

        return ds.GetXml();
    }

出力されるXM1のサンプルは次のとおりです。

<Menus>
- <Menu>
  <MenuID>23</MenuID> 
  <ITEMNMBR>0</ITEMNMBR> 
  <Text>ACC</Text> 
  <Description>ACC</Description> 
  <ParentID>0</ParentID> 
- <Menu>
  <MenuID>34</MenuID> 
  <ITEMNMBR>1</ITEMNMBR> 
  <Text>BASE</Text> 
  <Description>BASE</Description> 
  <ParentID>23</ParentID> 
- <Menu>
  <MenuID>516</MenuID> 
  <ITEMNMBR>2</ITEMNMBR> 
  <Text>HYP</Text> 
  <Description>HYP</Description> 
  <ParentID>34</ParentID> 

これを次のようなものに変換する必要があります:

<ul class="dropdown">
    <li><a href="#">ACC</a>
        <ul class="sub_menu">
           <li>
          <a href="#">BASE</a>
              <ul>
            <li>
              <a href="#">HYP</a>
              <ul>
            <li><a href="#">Terminal 1</a></li>
            <li><a href="#">Terminal 1</a></li>
               </ul>    
        </li>
    </ul>
</li>
4

2 に答える 2

1

xsltを使用してデータセットからhtmlを書き込む方法を示す次のMSDNリンクからいくつかのアイデアを得ることができます。

http://msdn.microsoft.com/en-us/library/8fd7xytc(v=vs.80).aspx

于 2013-03-25T19:31:12.160 に答える
0

それを行うための一般的な方法はありません。またはあなたのためにそれを作るためのある種のGUIツールです。

XMLを操作し、同等の(必要に応じて)htmlに変換する必要があります。

  • MenuItemsまず、CSS関連の問題のクリック効果を処理したいだけの場合は、変更しないことをお勧めします。ASP MenujQuery関数をアイテムに非常に簡単にバインドできます。これは非常に簡単に行うことができます。にを追加し、次のcss classようasp:menuItemにjQueryを使用して取得するだけです。

    <asp:Menu ID="myMenu" runat="server">
    ..
    <asp:MenuItem NavigateUrl="" CssClass="menuItem" Text="Menu1" Value="Menu1"/>
    

    そしてそれを次のようにつかみます

      $('.menuItem').click(function(){
             $(this).css({'width':'100px'});
      });
    
  • また、ASPメニューコントロールを破棄することを真剣に考えているが、のXMLデータソースを破棄しない場合は、menus深刻な文字列操作の準備をしてください。このようにしてください。

    XmlDocument doc = new XmlDocument(xml);
    XmlNodeList menus = doc.SelectNodes("//Menus/Menu");
    
    string html ="<ul>";
    foreach(XmlNode menu in menus)
    {
       html += "<li><a href='#' >";
       html += menu.SelectSingleNode("Text").InnerText + "</a></li>";
    }
    html +="</ul>";
    
于 2013-03-25T19:33:49.897 に答える