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

Error in HTML string function when running on some server

<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;                                    
}

当您尝试访问不存在的数组索引时发生 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() 返回的集合将没有元素,并且在尝试访问该函数的结果索引,引发错误。
正如您所说,它在本地主机上 运行 很好,然后您应该检查 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 returns 什么都没有,将引发该错误。在这种情况下,在访问它的索引之前检查 substrings 的长度。