在ASP MVC5中,按名称和类别搜索不能同时保留url中的两个参数

本文关键字:url 保留 参数 两个 搜索 MVC5 ASP 不能 | 更新日期: 2023-09-27 18:05:13

我在网上找不到这个问题的答案:

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

这里是详细信息,由url解释(因为这是我要问的):

场景1:

新页面=> l * calhost/产品/指数

按名称搜索=> l * calhost/产品/索引?searchTerm =机

在按名称搜索后按类别actionlink进行缩小=> l * calhost/产品? searchTerm = machine&土壤类别=

场景2(问题在这里):

新页面=> l * calhost/产品/指数

按类别按钮只列出该类别下的产品=> l * calhost/产品?类别=水泥

按名称插入搜索词以查找按上述类别列出的产品=> l * * * calhost/产品?searchTerm =机* *

不再附加searchTerm=machine,它取代了url中已经存在的category=Cement

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

这里是控制器:

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

在ASP MVC5中,按名称和类别搜索不能同时保留url中的两个参数

当您提交搜索栏表单时,只有一个数据被发布- searchTerm。为了让控制器同时使用searchTermcategory,表单上还需要category

我建议添加category作为隐藏输入,并将其设置为URL中的category值。

我的语法可能有点错,但它应该是这样的:
<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>