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

C# 按名称和类别搜索不能在ASP MVC5的url中同时保留这两个参数,c#,asp.net-mvc,C#,Asp.net Mvc,我在整个互联网上都找不到任何答案: 我正在按姓名搜索。此外,我还提供了一些类别的按钮。原因是,我希望用户按名称搜索,并按类别缩小搜索范围。它是这样工作的,但不是相反 以下是详细信息,由url解释(因为这就是我要问的): 场景1(效果完美): 新页 =>l*calhost/产品/索引 按姓名搜索 =>l*calhost/Product/Index?searchTerm=machine 按名称搜索后通过类别actionlink缩小范围 =>l*calhost/产品?搜索术语=机器和类别=土壤 场景2

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

我正在按姓名搜索。此外,我还提供了一些类别的按钮。原因是,我希望用户按名称搜索,并按类别缩小搜索范围。它是这样工作的,但不是相反

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

场景1(效果完美):

新页 =>l*calhost/产品/索引

按姓名搜索 =>l*calhost/Product/Index?searchTerm=machine

按名称搜索后通过类别actionlink缩小范围 =>l*calhost/产品?搜索术语=机器和类别=土壤

场景2(问题就在这里):

新页 =>l*calhost/产品/索引

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

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

它不是附加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);
    }
//
//获取:/Product/
公共操作结果索引(字符串searchTerm=null,字符串类别=null)
{
ViewBag.SearchTerm=SearchTerm;
ViewBag.Category=类别;
var CategoryList=新列表();
var CategoryQuery=来自c in _db.Products
orderby c.Category.Name
选择c.Category.Name;
AddRange(CategoryQuery.Distinct());
ViewBag.CategoryList=类别列表;
var products=来自p in_db.products
选择p;
如果(!String.IsNullOrEmpty(searchTerm))
{
products=products.Where(p=>p.Name.Contains(searchTerm));
}
如果(!String.IsNullOrEmpty(类别))
{
产品=产品。其中(p=>p.Category.Name==Category);
}
返回视图(产品);
}
这是搜索栏的视图:

<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>
            }
@foreach(ViewBag.CategoryList中的变量项)
{
字符串名称=项;
字符串cssClass=“”;
如果(ViewBag.Category==名称)
{
cssClass=“活动”;
}
  • @ActionLink(名称,“索引”,新的{searchTerm=ViewBag.searchTerm,category=name},新的{@class=cssClass})
  • }
    当您提交搜索栏表单时,只会发布一条数据-
    searchTerm
    。为了让您的控制器同时使用
    searchTerm
    category
    ,您还需要在表单上显示
    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>
    
    
    @Html.Hidden(“category”、@Request.QueryString[“category”])
    搜索
    
    我不太确定,但如果
    searchTerm
    可能是一个可为空的值,这可能会起作用。另一个选择是重载
    公共操作结果索引(string category=null)
    上帝保佑你,先生!当您访问印度尼西亚时,我将很高兴为您提供帮助。