我正在开发一个 C# webforms 应用程序,并且有一个数据层,它根据客户编号和订单类型收集有关客户可以看到的菜单的信息。
我一直在使用 ASP.NET 菜单控件,直到 qa 部门要求更改菜单以在单击时展开而不是悬停。那时,我决定尝试使用更简单的 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();
}
输出的 XMl 样本如下:
<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>