【问题标题】:Error in HTML string function when running on some server在某些服务器上运行时 HTML 字符串函数出错
【发布时间】:2016-11-19 21:09:00
【问题描述】:
<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="&lt;%:get_signUp_values()[0] %&gt;"

这是给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: Index was outside the bounds of the array 代码中唯一出现该异常的地方是访问 substrings[index] 时。确保其长度为 &gt;= 3
  • 欢迎来到 StackOverflow。关于您下一个问题的一些提示:请在发布之前更好地格式化您的代码。你的问题的答案会为其他人服务,而且用这种缩进很难阅读任何内容。
  • 高亮异常。以便任何人都可以了解问题所在

标签: c# asp.net somee


【解决方案1】:

当您尝试访问不存在的数组索引时发生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 在 cmets 中指出的那样,另一个选项是循环内 Regex.Split 返回的数组:

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

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

【讨论】:

  • 好的,让我们检查一下,如果问题解决了我会回复
  • 非常感谢您的回复,我的问题已解决,问题是我上传的数据库是数据库备份文件,它是自己添加的副本,我只是删除旧的备份文件,从 sql server 创建新文件并上传错误已修复。您认为该页面未正确获取值。
  • 嗨@ghasif,如果这个或任何答案解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。不过,没有义务这样做。
  • 另外,请注意这里说“谢谢”的首选方式是对好的问题和有用的答案进行投票(一旦你有足够的声誉这样做),并接受最有帮助的答案回答您提出的任何问题(这也可以稍微提升您的声誉)。请参阅About 页面和How do I ask questions here?。玩得开心!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
  • 2020-07-09
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
相关资源
最近更新 更多