Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC空查询字符串参数奇怪的行为_C#_Asp.net Mvc_Unit Testing_Model Binding - Fatal编程技术网

C# MVC空查询字符串参数奇怪的行为

C# MVC空查询字符串参数奇怪的行为,c#,asp.net-mvc,unit-testing,model-binding,C#,Asp.net Mvc,Unit Testing,Model Binding,我试图通过将关键字作为参数传递给控制器操作来实现搜索,如下所示: public ActionResult Index(string query) { var contacts = _unitOfWork.Contacts.GetContacts(_user.Id, query); var viewModel = contacts.Select(Mapper.Map<Contact, ContactViewModel>); return View("Index"

我试图通过将关键字作为参数传递给控制器操作来实现搜索,如下所示:

public ActionResult Index(string query)
{
    var contacts = _unitOfWork.Contacts.GetContacts(_user.Id, query);
    var viewModel = contacts.Select(Mapper.Map<Contact, ContactViewModel>);
    return View("Index", viewModel); 
}
当我导航到
http://localhost:50139/contacts/index?query=
,我得到一个空列表。逐步浏览代码后,很明显,
query
参数被转换为空字符串值。 为确保搜索有效,我进行了以下测试,所有测试均通过:

GetContacts_SearchByFirstName_ShouldReturnFilteredList
GetContacts_SearchByLastName_ShouldReturnFilteredList
GetContacts_SearchWithCapitalLetters_ShouldReturnFilteredList
GetContacts_SearchWithNullQuery_ShouldReturnAllContacts
特别是,以下测试使用空字符串运行函数,该函数也成功通过

[TestMethod]
public void GetContacts_SearchWithEmptyString_ShouldReturnAllContacts()
{
    var contactList = new List<Contact>()
    {
        // Construct new contact with first and last name and associated user id. 
        new Contact("e", "b",_userId ),
        new Contact("c", "b",_userId ),
        new Contact("a", "b",_userId ),
        new Contact("d", "b",_userId )
    };

    _mockContacts.SetSource(contactList);

    var result = _repository.GetContacts(_userId, "");

    result.Count().Should().Be(4);
}
[TestMethod]
public void GetContacts\u SearchWithEmptyString\u应返回所有联系人()
{
var contactList=新列表()
{
//使用名字和姓氏以及关联的用户id构建新联系人。
新联系人(“e”、“b”、“用户ID”),
新联系人(“c”、“b”、“用户ID”),
新联系人(“a”、“b”、“用户ID”),
新联系人(“d”、“b”、“用户ID”)
};
_mockContacts.SetSource(联系人列表);
var result=\u repository.GetContacts(\u userId,“”);
result.Count()应()为(4);
}

我在数据库中有3个联系人,当我不传递查询参数时,我可以看到所有联系人。如果您能指出控制器操作返回空列表的原因,我将不胜感激。

当您向查询参数传递空字符串时,条件
if(query!=null)
失败,并且下面的行

list = list.Where(c => c.FirstName.ToLower().Contains(query.ToLower())
            || c.LastName.ToLower().Contains(query.ToLower()));

执行,它检查数据库中是否有
LastName
中的空字符串项。此条件永远不会得到满足,因此您的列表将被空列表覆盖。

当您将空字符串传递给查询参数时,条件
if(query!=null)
失败,并且下面的行

list = list.Where(c => c.FirstName.ToLower().Contains(query.ToLower())
            || c.LastName.ToLower().Contains(query.ToLower()));

执行,它检查数据库中是否有
LastName
中的空字符串项。此条件永远不会得到满足,因此您的列表将被空列表覆盖。

if(query!=null)
更改为
if(!string.IsNullOrEmpty(query))
if(query!=null)
更改为
if(!string.IsNullOrEmpty(query))
尝试使用string.IsNullOrEmpty代替query!=nullTry使用String.IsNullOrEmpty代替query!=null问题是为什么控制器操作返回空列表?@StephenMuecke是,答案是因为if语句错误。否,OP声称他们的单元测试通过(但我怀疑他们的说法是错误的,因为我可以重复)问题是为什么控制器操作返回一个空列表?@StephenMuecke是的,答案是因为错误的if语句。否,OP声称他们的单元测试通过(但我怀疑他们的说法是错误的,因为我可以重复)