Je suis en train de mettre en œuvre la recherche en passant le mot-clé au contrôleur action en tant que paramètre comme indiqué ci-dessous:MVC paramètre de chaîne de requête vide comportement étrange
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);
}
fonction GetContacts
dans le référentiel se présente comme suit:
public IEnumerable<Contact> GetContacts(int userId, string query = null)
{
var list = _context.Contacts
.Where(c => c.UserId == userId)
.OrderBy(c => c.FirstName)
.AsQueryable();
if (query != null)
list = list.Where(c => c.FirstName.ToLower().Contains(query.ToLower())
|| c.LastName.ToLower().Contains(query.ToLower()));
return list.ToList();
}
Lorsque je navigue vers http://localhost:50139/contacts/index?query=
, j'obtiens une liste vide. Après avoir parcouru le code, il est évident que le paramètre query
est converti en une valeur de chaîne vide. Pour assurer les travaux de recherche, j'ai les tests suivants et tous les passe:
GetContacts_SearchByFirstName_ShouldReturnFilteredList
GetContacts_SearchByLastName_ShouldReturnFilteredList
GetContacts_SearchWithCapitalLetters_ShouldReturnFilteredList
GetContacts_SearchWithNullQuery_ShouldReturnAllContacts
En particulier, le test suivant exécute la fonction avec une chaîne vide, qui passe aussi avec succès.
[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);
}
J'ai 3 contacts dans la base de données et je peux tous les voir quand je ne passe pas le paramètre de requête. J'apprécierais si vous pourriez indiquer pourquoi l'action de contrôleur renvoie une liste vide.
Essayez d'utiliser String.IsNullOrEmpty au lieu de requête! = Null –