2017-10-14 24 views
0

Ich arbeite an Web-Anwendungsprojekt und ich versuche, die Suche mit Ajax einzuschließen.ASP.NET MVC 5 - ajax.beginform() mit null Parametern

Ich habe ein Suchformular mit ajax.beginform() erstellt und ich habe ein kleines Problem: Wenn mein Textboxfeld leer ist und ich auf Suche klicke, will die Ansicht alle Entitäten zurückgeben (als ob keine Suche stattgefunden hat) , aber es gibt leere Ansicht zurück. Ich habe versucht, den Controller einzuchecken, wenn die Zeichenfolge null ist, aber kein Erfolg.

1.Welcher Wert erhält der Parameter, wenn das Textfeld leer ist?

2.wie sende ich einige Parameter in dieser Form?

Vielen Dank im Voraus!

Aviv

.cshtml - Blick

@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- - Regler

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

Wo ist das „Land“ param kommen ... ?? –

Antwort

2

Wenn der Benutzer nichts in dem Eingabesuchfeld eingibt und das Formular abschicken , das Skript wird eine leere Zeichenfolge senden. Sie sollten also nach einer leeren oder leeren Zeichenfolge suchen.

if (!string.IsNullOrEmpty(branchname)) 
{ 
    model = model.Where(x => x.Branchname.Equals(branchname)).ToList(); 
} 

Auch der Name der Aktionsmethode sollte mit dem Namen des Eingabeelements übereinstimmen.

@Html.TextBox("branchname") 

Auch Sie müssen nicht ToList() vor Ihrer Where Klausel nennen. Sie können dies am Ende aufrufen und zu diesem Zeitpunkt wird der LINQ-Abfrageausdruck ausgewertet und Ihnen die gefilterten Ergebnisse angezeigt. Wenn Sie die Suche ohne Berücksichtigung der Groß-/Kleinschreibung verwenden möchten, verwenden Sie einen der StringComparison enum-Wert in der Equals Methodenüberladung.

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); 
} 

Wenn Sie mehrere Filter, fügen Sie eine weitere Where-Klausel auf der model ausführen möchten, bevor Sie ToList() (gleiche wie das, was wir für branch tat) nennen

+1

Vielen Dank! Es funktioniert :) –

+0

** @ Html.TextBoxFor (m => m.BranchName, neu {@class = "form-control"}) ** wäre mehr bevorzugt, da es eine Eingabe mit beiden Namen und ID als Branchname erstellen wird & feuern Sie auch alle zugehörigen Validierungen ab, bevor Sie sie abschicken –