我有一个有父/子关系的对象。
下面是我的短版本,但下面是核心道具public class Company
{
Name {get;set;}
List<Company> ChildCompany {get;set;}
}
显示如下内容:
-----ABC Corporation (in this chas ABC has child company so it will display right indent)
----------ABC Child
----------ABC One
----------ABC Two
-----BBC Corporation (in this case no child company)
-----CBS
-----CNN Corporation
----------ABC
----------BBC
----------NBC
我的代码:
Company company = new Company();
company = GetDataForCompany(); //DAL
if(!string.IsNullEmpty(company.Name))
{
//dispaly Name
PlaceHolder ph;
l = new Literal();
l.Text = "<ul>" + Environment.NewLine;
ph.Controls.Add(l);
l = new Literal();
l.Text = "<li">";
ph.Controls.Add(l);
hl = new HyperLink();
hl.Text = company.Name;
ph.Controls.Add(hl);
foreach (Company item in company)
{
l = new Literal();
l.Text = "<li">";
ph.Controls.Add(l);
hl = new HyperLink();
hl.Text = item.Name;
ph.Controls.Add(hl);
}
}
上面的代码似乎没有完全呈现我想要的内容,如上所示。
答案 0 :(得分:3)
首先,文字不是用于这样的任务,但你有例如HtmlGenericControl,它更适合你的目标。对于持有者来说也是如此 - 这些都是模板化的。
HtmlGenericControl unorderedList = new HtmlGenericControl("ul");
HtmlGenericControl tempItem = null;
HtmlGenericControl tempAnchor = null;
foreach (Company item in company)
{
tempItem = new HtmlGenericControl("li");
unorderedList.Controls.Add(tempItem);
tempAnchor = new HtmlGenericControl("a");
tempAnchor.Controls.Add(new Literal { Text = item.Name });
tempItem.Controls.Add(tempAnchor);
}
如果您需要更多功能,可以使用System.Web.HtmlControls命名空间,该命名空间具有任何常见(X)HTML表单元素的Web控件等等:
关于文字,这些用于本地化或在服务器控件中表示文字文本的好方法,因为文字具有与任何其他控件一样的标识符,简化文本替换和其他任务。
另一个要点是缩进将通过重写服务器控件的方法来实现,例如Render,RenderChildren等,它们提供了对HtmlTextWriter的访问,后来文本流编写器将其输出放到HTTP响应流中。
答案 1 :(得分:2)
您没有将Child公司嵌套在另一个无序列表中。您需要检查子公司并将这些列表项嵌套在另一个列表中,以使HTML看起来像您需要的那样。
// Code to display name here....
if (company.ChildCompany != null && company.ChildCompany.Count > 0)
{
l = new Literal();
l.Text = "<ul>";
ph.Controls.Add(l);
foreach (Company item in company.ChildCompany)
{
// Code for children.
}
l = new Literal();
l.Text = "</ul>";
ph.Controls.Add(l);
}
输出应该看起来像:
<ul>
<li>Company
<ul>
<li>Child Company #1</li>
<li>Child Company #2</li>
</ul>
</li>
</ul>