我在整个互联网上找不到任何答案:
我正在通过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>
}
答案 0 :(得分:0)
当您提交搜索栏表单时,只会发布一条数据 - searchTerm
。要让您的控制器同时使用searchTerm
和category
,您在表单上也需要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>