1

代码有什么问题..?它不工作!

实际上我想从数据库的一个字段中拆分条目。其中的项目用逗号分隔。

这就是我正在做的事情。

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>

但是输出没有出现,但是在调试模式下,我可以看到字符串正在分裂.. 怎么了?

4

4 回答 4

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();
于 2012-09-15T11:46:54.323 回答
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声明。希望这可以帮助。

于 2012-09-15T11:49:42.670 回答
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);
    }
于 2012-09-15T12:11:43.833 回答
0

你应该使用 asp:ListBox 而不是 Label

于 2012-09-15T11:57:21.527 回答