1

私はデータリストを使用して製品ID、名前、およびテキストボックス(「数量」)を表示し、ユーザーが注文数量を入力できるようにしています。System.NullReferenceException: Object reference not set to an instance of an object エラーが発生しました。ユーザーが注文するアイテムをクリックしたときです。私のデータソースは 2 つの列 (製品 ID と名前) しか提供しません。データリストにテキストボックス("Qty")とボタンを追加しました。送信するテキストボックス("Qty")から値を取得できません。データソースに「Qty」列が含まれていないため、FindControl は常に null 値を返す可能性がありますか? 問題を解決するにはどうすればよいですか? ありがとう。これが私のコードです:

<asp:DataList ID="DataList1" runat="server" CellPadding="10" DataKeyField="product_id" DataSourceID="SqlDataSource1" RepeatColumns="2">
 <ItemTemplate>
  <asp:Label ID="product_id" runat="server" 
     Text='<%# Eval("product_id") %>' /><br/>
  <asp:Label ID="product_name" runat="server" 
     Text='<%# Eval("product_name") %>' />
 <br />

<asp:TextBox ID="Qty" runat="server"></asp:TextBox>
<asp:Button ID="ButtonAddToCart" runat="server" Text="Add to Cart" CommandName="addtocart2"   OnCommand="DataList1_ItemCommand"
    />  
</ItemTemplate>
</asp:DataList>

ボタンのコードは次のとおりです。

public void DataList1_ItemCommand(object source, System.Web.UI.WebControls.CommandEventArgs e)

{
 var qtytxtbox =  DataList1.FindControl("Qty") as TextBox;
 // qtytxtbox always return null, why?

}
4

1 に答える 1

0

ハンドラーが正しくないようです。DataListCommandEventArgs2 番目のパラメーターとして使用する必要があります。だから、このようなことを試してください

マークアップ:

<asp:DataList ID="DataList1" runat="server" OnItemCommand="DataList1_ItemCommand" vCellPadding="10" DataKeyField="product_id" DataSourceID="SqlDataSource1" RepeatColumns="2">

次に、ボタンにコマンド名を追加します

<asp:Button ID="ButtonAddToCart" runat="server" Text="Add to Cart" CommandName="addtocart2" />  

コードビハインド

public void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
  if(e.CommandName.Equals("addtocart2")
  {
    TextBox qtytxtbox = (TextBox)(e.Item.FindControl("Qty"));
  }
}
于 2013-04-25T01:00:52.923 に答える