1

コードのどこが間違っていますか..?うまくいきません!!

実際には、データベースのフィールドの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 リストを作成したい場合、1 つのリスト項目にラベルを配置するだけでは十分ではなく、文字列ごとに 1 つのリスト項目が作成されません。リピーターを使用できます。

<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);

この方法により、マークアップ内の誤ったラベル コントロールが排除され、コード ビハインドから、元のバージョンでの手動の反復と不要な IList 宣言が排除されます。お役に立てれば。

于 2012-09-15T11:49:42.670 に答える
1

Guffa はすでに素晴らしいものですが、完全を期すためのものであり、そもそもあなたがどのようにやっていたかという精神に沿っているからです :-)

マークを次のように更新した場合:

   <ul>
   <asp:Literal id="literalIngredients" runat="server" />
   </ul>

(正直に言うと、Guffa が言ったように、foreach ループ内で使用した場合、元のコードは多かれ少なかれ機能していたでしょうyourLabel.Text += item;。変数とコントロールを同じ名前で呼ぶのは本当に良い考えではありません)

コードを次のように更新しました

    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

Label の代わりに asp:ListBox を使用する必要があります

于 2012-09-15T11:57:21.527 に答える