【问题标题】:FormCollection Check if NullFormCollection 检查是否为空
【发布时间】:2013-04-16 14:34:31
【问题描述】:

在这个条件语句中,我尝试了最后一部分,以便在我的表单集合为空时尝试执行一段代码。

if ((myDT == null) || (myCollection.GetKey(0).ToString() == "heatSearch") || (myCollection == null))
{
    //some code here
}

每次我运行代码并且表单集合为空时,此时该条件应该为真,我的应用程序崩溃并且我收到此错误:索引超出范围。必须是非负数且小于集合的大小。

更多信息...此检查在 AJAX 帖子调用的 ActionResult 中执行。该帖子失败并在此处显示的此行返回错误:<b> Source File: </b> c:\Users\D\Documents\Visual Studio 2012\Projects\TheMProject(1)\TheMProject\Models\HomeModel.cs<b>    Line: </b> 936

第 936 行是带有 if 的行。

【问题讨论】:

  • 代码中的哪一行给出了错误?不是if,是吗?
  • AllKeys.ToString() 没有多大意义。测试它:System.String[]
  • @Conrad Clark 是的,它发生在包含 if 的行上。
  • @John Willemse 是的,这是一个错字
  • 对不起,那现在是完全不同的代码行了……现在得到那个错误是有意义的。

标签: c# asp.net-mvc-4 formcollection


【解决方案1】:

修复它:

if ((myDT == null) || (myCollection == null) || (myCollection.GetKey(0).ToString() == "heatSearch"))
{
    //some code here
}

您在测试myCollection 是否为空之前调用myCollection.GetKey(0)

【讨论】:

  • 好的。将 (myCollection == null) 替换为 (myCollection.Count == 0) 可以正常工作。感谢您指出 GetKey 检查不能放在第一位。
【解决方案2】:

你试过了吗……

public ActionResult MyAction(FormCollection f)
{
    if (f.Count == 0)
        {
            Debug.WriteLine("Hello");
        }

        return View();
}

【讨论】:

    【解决方案3】:
    if ((myDT == null) || (myCollection == null) || (myCollection.Count > 0) )
    {
        //some code here
    }
    

    我会这样做

    【讨论】:

      猜你喜欢
      • 2015-02-02
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 2013-07-18
      • 2013-07-12
      • 2013-07-27
      • 2015-08-09
      • 2017-06-14
      相关资源
      最近更新 更多