検索値を制限するために複数のドロップダウンリストがあるフォームで検索を実行しようとしています。ドロップダウンリストはビューモデルを介して入力されます。
ビュー モデル: 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; }
}
}
これは、Home/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 つすべてのドロップダウン リストに値を入力した場合にのみ結果を取得します。これを達成しますか?
LINQ Dynamic Query Libraryを使用して、1つの可能な方法を考えました。
scott gu による LINQ 動的クエリ ライブラリの使用
そうすれば、最初のインデックス アクションで一連の if ステートメント (あまりエレガントではない) を使用してクエリを作成し、動的 LINQ で事前に作成されたクエリを使用して実行する 2 番目のアクションにリダイレクトできます。
これを達成するためのよりエレガントな方法がある場合は、私にアドバイスしてください。
ありがとうございました。