ネストされたリピーターのフッターで数量ボックス コントロールを検索すると、null 参照エラーが発生します。OnItemCommand関数が実行されたときにエラーが発生します(データがリピーターにバインドされているときではありません。これは以前に発生した問題でしたが修正されました)。
私は初心者なので、このすべてを理解しているわけではありません。私はそれを進めようとしていますが、foreach repeateritem 内の FindControl の理由がわかりません ( msdn によると、ヘッダーとリピーターのフッター!) は、そのリピーターのフッターにコントロールを見つけられません。それは私を夢中にさせています。
助けてください!
更新: コードを変更しましたが、まだ同じ問題があります。ddl を間違って参照しており、オブジェクトのインスタンスに設定されていないオブジェクト参照を取得し続けています。
コードは次のとおりです。
。ネット:
<asp:Content ID="ProductRepeater" ContentPlaceHolderID="ProductRepeater" Runat="Server">
<asp:Repeater ID="chairRepeater" OnItemCommand="productRepeater_ItemCommand" OnItemDataBound="chairRepeater_ItemDataBound" runat="server">
<ItemTemplate>
...
<asp:Repeater ID="variantRepeater" OnItemDataBound="variantRepeater_ItemDataBound" runat="server">
<ItemTemplate>
<li>
<asp:RadioButton ID="radioBtn" GroupName="collections" runat="server"></asp:RadioButton>
<asp:HiddenField ID="variantId" runat="server" />
<asp:Literal ID="Image1" runat="server" />
<asp:Literal ID="collectionName" runat="server" />
–
<asp:Literal ID="listPrice" runat="server" />
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
<asp:DropDownList ID="quantityLister" runat="server" />
</FooterTemplate>
</asp:Repeater>
<asp:ImageButton ID="addToCart" ImageUrl="assets/images/_addtocart.gif" runat="server" />
</div>
</div>
</ItemTemplate>
<SeparatorTemplate> <br />
</SeparatorTemplate>
<FooterTemplate> </FooterTemplate>
</asp:Repeater>
C#:
protected void productRepeater_ItemCommand(object source, RepeaterCommandEventArgs e)
{
BasketHelper basketHelper = new BasketHelper(SiteContext.Current.ShoppingBasketName);
OrderForm orderForm = basketHelper.GetOrderForm();
bool basketUpdated = false;
string catalogName = ConfigurationManager.AppSettings["PatioCatalogName"];
string productId = ((HiddenField)e.Item.FindControl("productId")).Value;
string variantId = "";
Repeater variantRepeater = (Repeater)e.Item.FindControl("variantRepeater");
foreach (RepeaterItem item in variantRepeater.Items)
{
RadioButton radioBtn = item.FindControl("radioBtn") as RadioButton;
if (radioBtn.Checked == true)
{
variantId = ((HiddenField)item.FindControl("variantId")).Value;
}
}
int quantity = 0;
DropDownList quantityLister = (DropDownList)variantRepeater.FindControl("quantityLister");
string ddlvalue = quantityLister.SelectedValue;
int.TryParse(ddlvalue, out quantity);
if (quantity > 0)
{
orderForm.LineItems.Add(new LineItem(catalogName, productId, variantId, quantity));
basketUpdated = true;
}
if (basketUpdated)
{
basketHelper.Basket.Save();
Response.Redirect(
String.Format(
CultureInfo.InvariantCulture,
"~/cart.aspx?{0}={1}",
SiteConstants.ActionQueryStringKey,
SiteConstants.RunPipelineCartAction),
true);
}
}
そして、購入ボタンを押したときに表示されるエラーは次のとおりです。
Server Error in '/' Application.
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 116: int quantity = 0;
Line 117: DropDownList quantityLister = (DropDownList)variantRepeater.FindControl("quantityLister");
Line 118: string ddlvalue = quantityLister.SelectedValue;
Line 119: int.TryParse(ddlvalue, out quantity);
Line 120:
Source File: c:\Inetpub\patios\chaircovers.aspx.cs Line: 118
Stack Trace:
[NullReferenceException: Object reference not set to an instance of an object.]
ChairCovers.productRepeater_ItemCommand(Object source, RepeaterCommandEventArgs e) in c:\Inetpub\patios\chaircovers.aspx.cs:118
System.Web.UI.WebControls.Repeater.OnItemCommand(RepeaterCommandEventArgs e) +108
System.Web.UI.WebControls.Repeater.OnBubbleEvent(Object sender, EventArgs e) +68
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.RepeaterItem.OnBubbleEvent(Object source, EventArgs e) +123
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.ImageButton.OnCommand(CommandEventArgs e) +111
System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument) +176
System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565