提取数组中文本框的值?

时间:2012-11-29 15:43:58

标签: asp.net

我在asp.net中动态创建了文本框。现在我通过以下代码提取值。

string[] sublist = new string[] { };
int[] maxmarkslist = new int[] { };
int i;
for (i = 0; i < Convert.ToInt32(Label15.Text); i++)
{
    string sub = "subject" + i;
    string marks = "maxmarks" + i;
    TextBox subject = (TextBox)PlaceHolder1.FindControl(sub);
    TextBox maxmarks = (TextBox)PlaceHolder1.FindControl(marks);
    sublist[i] = subject.Text;
    maxmarkslist[i] = Convert.ToInt32(maxmarks.Text);
}

但是我收到错误“索引超出了数组的范围”以下两行:

sublist[i] = subject.Text;
maxmarkslist[i] = Convert.ToInt32(maxmarks.Text);

当我调试它时,值会在subject.Text和maxmarks.Text中出现但不会出现在数组中。

我是否以错误的方式定义了数组?

2 个答案:

答案 0 :(得分:2)

将两个数组定义为空数组。因此,如果您尝试索引这些错误,您将获得索引错误。

数组不会动态扩展。如果需要,请使用集合类型,稍后可以转换为数组。

试试这个:

int length = Convert.ToInt32(Label15.Text);
string[] sublist = new string[length-1];
int[] maxmarkslist = new int[length-1];

for (int i = 0; i < length; i++)
{
    string sub = "subject" + i;
    string marks = "maxmarks" + i;
    TextBox subject = (TextBox)PlaceHolder1.FindControl(sub);
    TextBox maxmarks = (TextBox)PlaceHolder1.FindControl(marks);
    sublist[i] = subject.Text;
    maxmarkslist[i] = Convert.ToInt32(maxmarks.Text);
}

或者以下是如何使用集合(List)类型执行此操作:

        int length = Convert.ToInt32(Label15.Text);
        List<string> sublist1 = new List<string>();
        List<int> maxmarkslist1 = new List<int>();

        for (int i = 0; i < Convert.ToInt32(Label15.Text); i++)
        {
            string sub = "subject" + i;
            string marks = "maxmarks" + i;
            TextBox subject = (TextBox)PlaceHolder1.FindControl(sub);
            TextBox maxmarks = (TextBox)PlaceHolder1.FindControl(marks);
            sublist1.Add(subject.Text);
            maxmarkslist1.Add(Convert.ToInt32(maxmarks.Text));
        }

        string[] sublist = sublist1.ToArray();
        int[] maxmarkslist = maxmarkslist1.ToArray();

请注意,您无需预先指定大小。但是要继续添加项目,因为它可以根据需要进行扩展。但阵列无法做到这一点。

您的string[] sublist = new string[] { };是一种创建和初始化数组的快捷方式。因为您不必指定大小,但编译器将计算{}之间的元素并适当地设置大小。在你的情况下,由于{}内没有元素,它将创建一个空数组。

答案 1 :(得分:1)

        string[] sublist = new string[100];
        int[] maxmarkslist = new int[100];

把this..replace 100放在你的循环的最大可能值...但这不是一个好习惯...如果我发现更好的东西会回到这个线程......