在某些服务器上 运行 时 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
的长度。
<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
的长度。