我試圖用一個表單執行搜索,該表單有多個dropdownlist來限制搜索值,下拉列表通過viewmodel填充。ASP MVC多個下拉列表搜索表單
視圖模型:PesquisaHomeViewModel.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MinisPT.Models;
namespace MinisPT.ViewModels {
public class PesquisaHomeViewModel
{
public List<Marca> Marcas { get; set; }
public List<Modelo> Modelos { get; set; }
public List<EstadoProduto> EstadosProdutos { get; set; }
}
}
這是與表單視圖的一部分:首頁/ Index.cshtml
@using (Html.BeginForm("Index", "ResultadosPesquisa", FormMethod.Get))
{
@Html.ValidationSummary(true)
<div id="coluna1">
<div class="coluna1_titulo">Marca</div>
<div class="coluna1_DropDownList">
@Html.DropDownListFor(m => m.Marcas, new SelectList(Model.Marcas, "MarcaNome", "MarcaNome"), String.Empty)
</div>
<div class="coluna1_titulo">Modelo</div>
<div class="coluna1_DropDownList">
@Html.DropDownListFor(md => md.Modelos, new SelectList(Model.Modelos, "ModeloNome", "ModeloNome"), String.Empty)
</div>
<div class="coluna1_titulo">Estado</div>
<div class="coluna1_DropDownList">
@Html.DropDownListFor(e => e.EstadosProdutos, new SelectList(Model.EstadosProdutos, "EstadoProdutoTipo", "EstadoProdutoTipo"), String.Empty)
</div>
<span>
<input type="submit" value="Pesquisar" class="botaoPesquisa" />
</span>
}
正如你可以看到直通該提交,我稱之爲「ResultadosPesquisa」控制器的索引操作,在該控制器中,我使用表單的參數並嘗試對名爲「Anuncios」的模型(這意味着我的語言中的「Ads」)進行搜索。
個ResultadosPesquisaController.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data;
using System.Data.Entity;
using MinisPT.Models;
using MinisPT.ViewModels;
namespace MinisPT.Controllers
{
public class ResultadosPesquisaController : Controller
{
MinisPTEntities db = new MinisPTEntities();
//
// GET: /ResultadosPesquisa/
public ActionResult Index(string Marcas, string Modelos, string EstadosProdutos)
{
var query = from m in db.Anuncios.Include(a => a.Marca).Include(a => a.Modelo)
where m.Marca.MarcaNome == Marcas
where m.Modelo.ModeloNome == Modelos
where m.EstadoProduto.EstadoProdutoTipo == EstadosProdutos
select m;
return View(query.ToList());
}
}
}
至極調用視圖ResultadosPesquisa/Index.cshtml是我應該顯示結果後:
@model IEnumerable<MinisPT.Models.Anuncio>
... (html stuff in here)
<table>
<tr>
<th>
Marca
</th>
<th>
Modelo
</th>
<th>
Estado
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(a => item.Marca.MarcaNome)
</td>
<td>
@Html.DisplayFor(a => item.Modelo.ModeloNome)
</td>
<td>
@Html.DisplayFor(a => item.EstadoProduto.EstadoProdutoTipo)
</td>
</tr>
}
</table>
* 我的問題是*上ResultadosPesquisaController查詢只給我結果,如果我把值放在所有3 dropdownlists,如果我只選擇一個下拉列表中的值沒有返回,但我想使所有下拉列表可選,我如何執行此操作?
我想到了一種可能的方式,使用LINQ動態查詢庫,
using LINQ Dynamic Query Library by scott gu
這樣,我可以構建第一個索引操作的查詢,帶着一幫的if語句(不是很優雅)並重定向到第二個動作,我將使用動態LINQ的預建查詢並執行它。
如果有一個更優雅的實現方式,請告訴我。
謝謝。
感謝您的快速回復Joel,它確實會返回任何選擇,但問題是它會單獨返回結果,我希望它們像這樣疊加togheter:第一個dll的值爲「Marcas」= A和第二個DLL的值是「Modelos」= B,所以結果必須有Marca A和Modelo B(馬卡意味着Maker和modelo意味着模型,順便說一句),所以OR's不會按照我喜歡的方式解決它。 –
@Ricardo_Rodrigues:所以如果我正確理解你,如果你只選擇了1個下拉菜單,你希望它返回下拉菜單,但是如果你選擇了2個下拉菜單,那麼只有當它們兩個都是。而且你希望能夠以任意順序選擇任意一組3。 –
是的,你是正確的喬伊,這就是我正在尋找的。 –