私は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>