按名称和类别搜索不能将这两个参数保存在ASP MVC5的URL中

时间:2014-05-27 07:00:16

标签: c# asp.net-mvc

我在整个互联网上找不到任何答案:

我正在通过NAME进行搜索。另外,我提供了一些CATEGORY按钮。原因是,我希望用户按名称搜索并按类别缩小范围。它以这种方式工作,但不是相反。

这里是细节,由网址解释(因为这是我要问的):

方案1(效果很好):

新页面 => L * calhost /产品/索引

按名称搜索 => L * calhost /产品/索引?SEARCHTERM =机器

按名称搜索后按类别actionlink缩小范围 => L * calhost /产品SEARCHTERM =机器&安培;类别=土壤

SCenario 2(这是问题):

新页面 => L * calhost /产品/索引

按类别按钮仅列出此类别下的产品 => L * calhost /产品?类别=水泥

按名称插入搜索字词,以查找上述类别所列的产品 => L * calhost /产品**?SEARCHTERM =机器**

它不会附加 searchTerm = machine ,而是取代已在网址中的类别=水泥

请告诉我如何解决这个问题。

这是控制器:

//
    // GET: /Product/
    public ActionResult Index(string searchTerm = null, string category = null)
    {
        ViewBag.SearchTerm = searchTerm;
        ViewBag.Category = category;

        var CategoryList = new List<string>();

        var CategoryQuery = from c in _db.Products
                            orderby c.Category.Name
                            select c.Category.Name;

        CategoryList.AddRange(CategoryQuery.Distinct());
        ViewBag.CategoryList = CategoryList;

        var products = from p in _db.Products
                       select p;

        if (!String.IsNullOrEmpty(searchTerm))
        {
            products = products.Where(p => p.Name.Contains(searchTerm));
        }

        if (!String.IsNullOrEmpty(category))
        {
            products = products.Where(p => p.Category.Name == category);
        }

        return View(products);
    }

以下是搜索栏的视图:

<form method="get">
      <input class="span5" id="appendedInputButton" type="text" placeholder="Search Blog" name="searchTerm">
      <button class="btn btn-primary sicon-search sicon-white" type="submit"><i>Search</i></button>
</form>

以下是类别按钮的代码:

@foreach (var item in ViewBag.CategoryList)
            {
                string name = item;
                string cssClass = "";

                if (ViewBag.Category == name)
                {
                    cssClass = "active";
                }

                <li>
                    @Html.ActionLink(name, "Index", new { searchTerm = ViewBag.SearchTerm, category = name }, new { @class = cssClass })
                </li>
            }

1 个答案:

答案 0 :(得分:0)

当您提交搜索栏表单时,只会发布一条数据 - searchTerm。要让您的控制器同时使用searchTermcategory,您在表单上也需要category

我建议添加category作为隐藏输入,并将其设置为URL中的类别值。这样就会坚持下去。

我可能会觉得语法有点不对,但它会像:

<form method="get">
      @Html.Hidden("category", @Request.QueryString["category"])
      <input class="span5" id="appendedInputButton" type="text" placeholder="Search Blog" name="searchTerm">
      <button class="btn btn-primary sicon-search sicon-white" type="submit"><i>Search</i></button>
</form>