Привет. Я пытаюсь динамически создавать кнопки и текстовые поля из списка при загрузке моей страницы. К кнопкам прикреплено событие click, которое добавляет его в TextBox. В то же время это происходит, и я хочу обновить соответствующий элемент списка на новый номер.
Моя проблема в том, что я получаю сообщение об ошибке:
Индекс был вне диапазона. Должен быть неотрицательным и меньшим, чем размер коллекции. Имя параметра: index
Кажется, я не понимаю, почему я получаю ошибку и, следовательно, как я могу исправить свою проблему. Ниже я подготовил пример кода, воссоздающий проблему:
public partial class _Default : Page
{
List<ProductRates> ProductRateList = new List<ProductRates>() {
new ProductRates(1,"Test",0),
new ProductRates(2,"Test2",0),
new ProductRates(3,"Test3",0)
};
protected void Page_Load(object sender, EventArgs e)
{
for (int i = 0; i < ProductRateList.Count; i++)
{
double testing = ProductRateList[i].ProductOrderAmount;
TextBox textBox = new TextBox();
textBox.Text = "0";
textBox.ID = ProductRateList[i].ProductName + "TextBox";
Button plusButton = new Button();
plusButton.Text = "+";
plusButton.ID = ProductRateList[i].ProductName + "PinusButton";
plusButton.Click += (se, ev) => PlusButton_Click(se, ev, ProductRateList,i, textBox);
System.Web.UI.HtmlControls.HtmlGenericControl createButtonDiv =
new System.Web.UI.HtmlControls.HtmlGenericControl("DIV");
createButtonDiv.ID = ProductRateList[i].ProductName + "createButtonDiv";
createButtonDiv.Attributes.Add("class", "col-md-6");
createButtonDiv.Controls.Add(plusButton);
createButtonDiv.Controls.Add(textBox);
ProductPlaceholderDiv.Controls.Add(createButtonDiv);
}
}
void PlusButton_Click(Object sender, EventArgs e, List<ProductRates> ProductRateList, int i, TextBox textBox)
{
string test = textBox.Text;
ProductRateList[i].ProductOrderAmount = 1 + double.Parse(test);
textBox.Text = (ProductRateList[i].ProductOrderAmount).ToString();
}
public class ProductRates
{
public ProductRates(int prodductId, string productName , double productOrderAmount )
{
ProdductId = prodductId;
ProductName = productName;
ProductOrderAmount = productOrderAmount;
}
//Product
public int ProdductId { get; set; }
public string ProductName { get; set; }
public double ProductOrderAmount { get; set; }
}
}