代码中有什么问题..?它不起作用!!
实际上我想从数据库的一个字段中拆分条目..其中的项目用逗号分隔..
这就是我在做什么。
string str = dataSet.Tables[0].Rows[0]["Ingredients"].ToString();
string[] split = str.Split(',');
IList<string> lblListItemIngredients = new List<string>();
foreach (string item in split)
{
lblListItemIngredients.Add(item);
}
在我的aspx页面中,
<ul>
<li>
<asp:label id="lblListItemIngredients" runat="server></asp:Label>
</li>
</ul>
但是输出没有到来,但是在调试模式下,我可以看到字符串正在分裂..什么错了?
答案 0 :(得分:3)
您必须以某种方式将列表中的数据提供给控件。这不会神奇地发生,因为你给变量的名称与控件的id相同。
实际上,您应该为变量使用不同的名称,否则它将遮蔽已添加到页面对象的属性。
如果要创建HTML列表,仅在一个列表项中放置标签是不够的,这不会为每个字符串创建一个列表项。您可以使用转发器:
<ul>
<asp:Repeater id="lblListItemIngredients" runat="server">
<ItemTemplate>
<li><%# Container.DataItem %></li>
</ItemTemplate>
</asp:Repeater>
</ul>
您不必为数据源创建列表,数组工作正常:
string str = dataSet.Tables[0].Rows[0]["Ingredients"].ToString();
string[] split = str.Split(',');
lblListItemIngredients.DataSource = split;
lblListItemIngredients.DataBind();
答案 1 :(得分:1)
当您使用asp:label
之类的内容时,您在页面标记中使用了asp:ListBox
控件。从代码中消除IList<String>
声明。
将更多字符串数组添加到ListBox的更好方法如下:
首先,在您的标记中,将不正确的控件引用更改为ListBox:
<asp:ListBox id="IngredientList" runat="server"></asp:ListBox>
其次,在源代码中,简化了添加:
string str = dataSet.Tables[0].Rows[0]["Ingredients"].ToString();
string[] ingredients= str.Split(',');
IngredientList.Items.AddRange(ingredients);
此方法消除了markkup中不正确的标签控制,并且从后面的代码中消除了原始版本中的手动迭代和不需要的IList声明。希望这会有所帮助。
答案 2 :(得分:1)
Guffa已经爆炸了,但仅仅是为了完整性,并且因为它符合你一如既往的精神: - )
如果您将商标更新为:
<ul>
<asp:Literal id="literalIngredients" runat="server" />
</ul>
(老实说,如果在foreach循环中使用yourLabel.Text += item;
,你的原始代码会有更多或更少的工作,正如Guffa所说,调用变量和控件同名不是一个好主意)
并将您的代码更新为
string str = dataSet.Tables[0].Rows[0]["Ingredients"].ToString();
string[] split = str.Split(',');
// not needed IList<string> lblListItemIngredients = new List<string>();
foreach (string item in split)
{
literalIngredients.Text += string.Format("<li>{0}</li>",item);
}
答案 3 :(得分:0)
你应该使用asp:ListBox而不是Label