2017-02-22 56 views
0

Я пытаюсь создать Поиск по ключевым словам действие в моем проекте. Вот код в представлении:Фильтровать «Поиск по ключевым словам» не работает

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

Вот модель:

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

} 

Вот контроллер, где она не работает. В Newest First даются правильные данные, но ключевое слово сначала просто дает каждому объекту списка.

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

    } 

И вот некоторые из элементов списка новостей:

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

Если текст равен нулю, он вернет все записи. и имя входа не соответствует параметру. – Nkosi

+2

'' (не '" ключевое слово "' - ему нужно совместить имя параметра в вашем методе) –

+0

Я знаю, но я пытаюсь когда текст не равен null, и он все равно возвращает все записи. –

ответ

2

Ваш «поиск» вход имеет name="keyword", который не совпадает с именем вашего параметра. Измените одно или другое так, чтобы они совпадали.

По мнению

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

или в контроллере

public ActionResult News(string news, string keyword) 

и обратите внимание, что нет необходимости добавлять = null (они уже есть по умолчанию)

Что вы должны делать однако создает модель представления с поисковыми свойствами и коллекцией

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

и сильно привязка к модели с использованием HtmlHelper методов в представлении, например

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

так, что, когда вы вернетесь вид, значение в ваших входах сохраняется.