在某些服务器上运行时,HTML字符串函数出错

时间:2016-11-19 21:09:01

标签: c# asp.net somee

<div class="form-group">
    <span class="auto-style2">
            <label class="col-xs control-label">First Name:</label>
    </span>
    <input type="text" name="Name" id="Name" value="<%:get_signUp_values()[0] %>" class="form-control" />
</div>

<div class="form-group">
    <span class="auto-style2">
        <label class="col-xs control-label">Last Name:</label>
    </span>
    <input type="text" name="lastName" id="lastName" value="<%:get_signUp_values()[1] %>" class="form-control" />
</div>

<div class="form-group">
    <span class="auto-style2">
        <label class="col-xs control-label">Birthday:</label>
    </span>
    <input type="text" name="dob" id="dob" value="<%:get_signUp_values()[2] %>-<%:get_signUp_values()[3] %>-<%:get_signUp_values()[4] %>" class="form-control" />
</div>

这是给出错误的代码

value="<%:get_signUp_values()[0] %>"

这是IndexOutOfRangeException: Index was outside the bounds of the array.。这个错误发生在某些人身上,但不会发生在localhost上。

代码隐藏:

public List<HtmlString> get_signUp_values()
{
    int userid = Convert.ToInt32(Session["USERID"]);

    List<DAO_SignUp> get_signUp_val = new List<DAO_SignUp>(DAO_SignUp.get_signUp(userid));

    List<HtmlString> get_values = new List<HtmlString>();

    foreach (var obj2 in get_signUp_val)
    {
        get_values.Add(new HtmlString(obj2.get_First_name));
        get_values.Add(new HtmlString(obj2.get_last_name));

        string dob = obj2.get_dob.ToString();
        string patren = "-";
        string[] substrings = Regex.Split(dob, patren);
        string day = substrings[0];
        string month = substrings[1];
        string year = substrings[2];

        get_values.Add(new HtmlString(day));
        get_values.Add(new HtmlString(month));
        get_values.Add(new HtmlString(year));
    }
    return get_values;                                    
}

1 个答案:

答案 0 :(得分:-2)

当您尝试访问不存在的数组索引时,会发生IndexOutOfRangeException。

通过查看您的代码,问题可能只有两个地方。

首先,我可以看到通过循环DAO_SignUp调用的结果来填充集合:

List<DAO_SignUp> get_signUp_val = new List<DAO_SignUp>(DAO_SignUp.get_signUp(userid));   
foreach (var obj2 in get_signUp_val) (...)

然后我们可以推断出问题可能是DAO_SignUp.get_signUp(userid)没有在服务器上返回任何内容,因此函数get_signUp_values()返回的集合没有元素,并且在尝试访问结果索引时该功能,提出错误 正如你所说它在localhost上正常运行,你应该检查DAO_SignUp上的配置。如果它连接到数据库,请检查它是否有数据,以及连接字符串是否指向正确的数据库。

正如L.B的评论所指出的那样,另一个选项是循环中Regex.Split返回的数组:

string[] substrings = Regex.Split(dob, patren);
string day = substrings[0];
string month = substrings[1];
string year = substrings[2];

如果Regex.Split没有返回任何内容,则会引发该错误。在这种情况下,请在访问它之前检查substrings的长度索引。