2017-10-14 5 views
0

Je travaille sur un projet d'application web et j'essaie d'inclure la recherche en utilisant ajax.ASP.NET MVC 5 - ajax.beginform() avec les paramètres null

J'ai créé un formulaire de recherche en utilisant ajax.beginform() et j'ai un petit problème: Quand mon champ de zone de texte est vide et je clique sur recherche je veux que la vue retourne toutes les entités (comme aucune recherche n'a lieu) , mais il renvoie une vue vide. J'ai essayé de vérifier dans le contrôleur si la chaîne est nulle mais sans succès.

1. Quelle est la valeur du paramètre lorsque le champ de texte est vide?

2.Comment envoyer deux paramètres sous cette forme?

Merci d'avance!

Aviv

.cshtml - Voir

@using (Ajax.BeginForm("BranchSearch", "Branches", 
     new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "searchResults" })) 
{ 
    <h3>Search:</h3> 
    <p>Branch name :</p>@Html.TextBox("Search", null, new { id = branchname"}) 
    <input type="submit" value="Search" class="btn btn-primary" /> 
} 

.cs - Contrôleur

public PartialViewResult BranchSearch(String branchname, String country) 
{ 
    List<Branches> model = (from p in db.Branches 
         select p).ToList(); 

    if(branchname!=null) 
     { 
     model = model.Where(x => x.BranchName.Equals(branchname)).ToList(); 
     } 

     return PartialView("BranchSearch",model); 
}  
+0

Où est le « pays » en provenance de ... param ?? –

Répondre

2

Lorsque l'utilisateur ne pénètre pas quoi que ce soit dans la zone de recherche d'entrée et soumettre le formulaire , le script enverra une chaîne vide. Donc, vous devriez vérifier la chaîne vide ou vide. Votre nom de paramètre de méthode d'action doit également correspondre à votre nom d'élément d'entrée.

@Html.TextBox("branchname") 

En outre, vous n'avez pas besoin d'appeler ToList() avant votre clause Where. Vous pouvez appeler cela à la toute fin et à ce moment-là l'expression de la requête LINQ sera évaluée et vous donnera les résultats filtrés. Si vous souhaitez utiliser la recherche insensible à la casse, utilisez l'une des valeurs enum StringComparison insensibles à la casse dans la surcharge de méthode Equals.

public PartialViewResult BranchSearch(String branchname, String country) 
{ 
    IQueryable<Branch> model = db.Branches; 
    if (!string.IsNullOrEmpty(branchname)) 
    { 
     model = model.Where(x => x.BranchName.Equals(branchname 
             ,StringComparison.OrdinalIgnoreCase)); 
    } 
    // Now we are ready to query the db and get results. Call ToList() 
    var result = model.ToList(); 
    return PartialView("BranchSearch", result); 
} 

Si vous souhaitez exécuter plusieurs filtres, ajouter une autre clause Where sur le model avant d'appeler ToList() (même que ce que nous avons fait pour BRANCHNAME)

+1

Merci beaucoup! Cela fonctionne :) –

+0

** @ Html.TextBoxFor (m => m.BranchName, nouveau {@class = "form-control"}) ** serait plus préféré car il va créer une entrée avec à la fois nom et ID comme nom de la filiale et également déclencher toute validation associée avant de soumettre –