2017-02-22 3 views
0

Ich versuche, Suche nach Schlüsselwort Aktion in meinem Projekt zu erstellen. Hier ist der Code in der Ansicht:Filter 'Suche nach Schlüsselwort' funktioniert nicht

<form method="get"> 
<input type="radio" name="news" value="newest"> Newest First 
<input type="radio" name="news" value="keyword"> Keyword Search 

<input type="search" name="keyword" id="search" /> 
<button type="submit" value="Search"><span class="glyphicon glyphicon-search"></span></button> 

Hier ist das Modell:

public class News 
{ 
    public int Id { get; set; } 
    public string Date { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public string Image { get; set; } 
    public string Link { get; set; } 

} 

Hier ist die Steuerung, wo es nicht funktioniert. Das Neueste zuerst gibt die richtigen Daten, aber das Schlüsselwort gibt zuerst jedes einzelne Objekt der Liste an.

[HttpGet] 
    public ActionResult News(String news = null, String text = null) 
    { 
     if (news == "newest") 
     { 

      var model = 
       from n in _news 
       orderby n.Date 
       select n; 
      return View(model); 
     } 
     else { 

      var model = 
       from n in _news 
       .Where(n=> text == null || n.Name.Contains(text)) 
       select n; 

      return View(model);   
     } 

    } 

Und hier sind einige der Elemente der Nachrichten-Liste:

static List<News> _news = new List<News> 
    { 

     new News { 

      Id = 1, 
      Date = "01/01/2017", 
      Name = "blabla", 
      Description = "blabla", 
      Image = "blabla.jpg", 
      Link = "dassda" 
     }, 

     new News { 

      Id = 2, 
      Date = "vlava", 
      Name = "dada", 
      Description = "dsadasa", 
      Image = "dasdsa.jpg", 
      Link = "sdaa" 
     }; 
+0

Wenn Text null ist, werden alle Datensätze zurückgegeben. und der Name der Eingabe stimmt nicht mit dem Parameter überein. – Nkosi

+2

'' (nicht '" keyword "' - es muss mit dem Namen des Parameters in Ihrer Methode übereinstimmen) –

+0

Ich weiß, aber ich versuche es Wenn Text nicht null ist, werden alle Datensätze zurückgegeben. –

Antwort

2

Ihre ‚Suche‘ Eingabe ein name="keyword" hat, die nicht den Namen des Parameters paßt. Ändern Sie das eine oder das andere, damit sie übereinstimmen.

Nach Ansicht

<input type="search" name="keyword" id="search" /> 

oder in der Steuerung

public ActionResult News(string news, string keyword) 

und beachten Sie, dass keine Notwendigkeit (sie standardmäßig bereits sind)

hinzufügen = null ist, was Sie tun sollten, erstellt jedoch ein Ansichtsmodell mit den Sucheigenschaften und der Sammlung

public class MyViewModel 
{ 
    public string News { get; set; } // an enum would be a better choice 
    public string Keyword { get; set; } 
    public IEnumerable<News> NewsList { get; set; } 
} 

und zu Ihrem Modell mit den HtmlHelper Methoden in der Ansicht stark bindende, zum Beispiel

@Html.TextBoxFor(m => m.KeyWord, new { type="search" }) 

, so dass, wenn Sie die Ansicht zurückkehren, werden die Werte in Ihren Eingaben erhalten.

Verwandte Themen