过滤“按关键字搜索”无效

时间:2017-02-22 00:06:25

标签: .net asp.net-mvc-4 search

我正在尝试在项目中创建按关键字搜索的操作。 以下是视图中的代码:

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

}

这是控制器无法正常工作的地方。最新的第一个是提供正确的数据,但关键字首先只是给出列表中的每个对象。

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

1 个答案:

答案 0 :(得分:2)

您的搜索&#39;输入的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" })

这样当您返回视图时,输入中的值将被保留。