我正在构建一个 MVC 应用程序,用户可以在其中使用大量过滤器来获得他想要的东西。
以下是基于控制器方法的这些过滤器的概述:
//
// GET: /Card/SearchIndex
public ActionResult SearchIndex(string objName, string objType, string objCostSymbol, string objCost, string powerSymbol,
string powerValue, string ratingSymbol, string ratingValue, string ownerName, string objSet,
string objRarity, string addCostValue, int? objNumber,
string addCostValue2, string addCostValue3, string addCostValue4, string addCostValue5, string addCostValue6,
bool? blueColor, bool? redColor, bool? yellowColor, bool? purpleColor, bool? greyColor, bool? blackColor,
bool? musicColor, bool? allColor)
{
// MORE CODE HERE...
}
我想知道如何处理所有这些过滤器的最佳方法,以及如何根据给定的参数获取 objInfo 列表。请记住,某些值可能为空。到目前为止,我所做的只是加载“所有”我可以的 objInfo,然后通过删除不需要的项目对它们进行排序,这在我的意义上是“不聪明的”,但我是 MVC 应用程序的新手,我我试图找到一种更好的方法来做到这一点。
编辑
这是生成数据的视图:
@using System.Web.Mvc.Html
@model PagedList.IPagedList<MvcApp.Models.ObjInfo>
@{
ViewBag.Title = "SearchIndex";
}
<h2>Objects Management</h2>
<p>
@Html.ActionLink("Create New Obj", "Create")
@using (Html.BeginForm()){
<p>
<label>
Obj Colors : Check a box to search for a color.
</label>
All: @Html.CheckBox("allColor", true)<br/>
Blue: @Html.CheckBox("blueColor", true)
Red: @Html.CheckBox("redColor", true)
Yellow: @Html.CheckBox("yellowColor", true) <br/>
Purple: @Html.CheckBox("purpleColor", true)
Grey: @Html.CheckBox("greyColor", true)
Black: @Html.CheckBox("blackColor", true)
Music: @Html.CheckBox("musicColor", true)
</p>
<p>
<label>
Obj Values: Select a value in the list below.
</label>
Obj Number: <input type="number" min="0" max="9999" name="cardNumber" value="int" style="width: 70px"/><br/>
Additional Cost (contains): @Html.DropDownList("addCost", String.Empty) + @Html.DropDownList("addCost2", String.Empty)
+ @Html.DropDownList("addCost3", String.Empty) + @Html.DropDownList("addCost4", String.Empty)
+ @Html.DropDownList("addCost5", String.Empty) + @Html.DropDownList("addCost6", String.Empty) <br/>
Cost: @Html.DropDownList("objCostSymbol", "=") @Html.DropDownList("objCost", String.Empty)<br />
Power: @Html.DropDownList("powerSymbol", "=") @Html.DropDownList("powerValue", String.Empty)<br/>
Rating: @Html.DropDownList("ratingSymbol", "=") @Html.DropDownList("ratingValue", String.Empty)<br />
<label>
Obj Text: Write a name, part of a name, or a word.
</label>
Obj Name: @Html.TextBox("objName") <br/>
Owner: @Html.TextBox("ownerName") <br />
<label>
Obj Categories: Select a category in the list below.
</label>
Type: @Html.DropDownList("objType","All") <br/>
Obj Set: @Html.DropDownList("objSet", "All") <br/>
Rarity: @Html.DropDownList("objRarity", "All")<br />
<div class="float-right">
<input type="submit" value="Filter" name="submitbutton">
</div>
</p>
}
</p>
<span style="color:red; font-size: 1.7em; font-style: italic;">@ViewData["ErrorMessage"]</span>
<table>
<tr>
<th>Obj Name</th>
<th>Obj Number</th>
<th>Obj Color</th>
<th>Additional Cost</th>
<th>Cost</th>
<th>Obj Type</th>
<th>@Html.ActionLink("Power", "SearchIndex", new {sortOrder=ViewBag.PowerSortParm})</th>
<th>@Html.ActionLink("Rating", "SearchIndex", new {sortOrder=ViewBag.RatingSortParm})</th>
<th>Rarity</th>
<th>Obj Set Name</th>
<th>Owner Name</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.m_ObjName)
</td>
<td>
@Html.DisplayFor(modelItem => item.m_ObjNumber)
</td>
<td>
@Html.DisplayFor(modelItem => item.m_ObjColor)
</td>
<td>
@Html.DisplayFor(modelItem => item.m_ObjAddCost)
</td>
<td>
@Html.DisplayFor(modelItem => item.m_ObjCost)
</td>
<td>
@Html.DisplayFor(modelItem => item.m_ObjType)
</td>
<td>
@Html.DisplayFor(modelItem => item.m_ObjPower)
</td>
<td>
@Html.DisplayFor(modelItem => item.m_ObjRating)
</td>
<td>
@Html.DisplayFor(modelItem => item.m_ObjRarity)
</td>
<td>
@Html.DisplayFor(modelItem => item.m_ObjSet.m_ObjSetName)
</td>
<td>
@Html.DisplayFor(modelItem => item.m_ObjOwner)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.m_ObjID }) |
@Html.ActionLink("Details", "Details", new { id=item.m_ObjID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.m_ObjID })
</td>
</tr>
}
</table>
<div>
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber)
of @Model.PageCount
@if (Model.HasPreviousPage)
{
@Html.ActionLink("<<", "SearchIndex", new {page = 1, sortOrder = ViewBag.CurrentSort})
@Html.Raw(" ")
@Html.ActionLink("< Prev", "SearchIndex", new {page = Model.PageNumber - 1, sortOrder = ViewBag.CurrentSort})
}
else
{
@:<<
@Html.Raw(" ");
@:< Prev
}
@if (Model.HasNextPage)
{
@Html.ActionLink("Next >", "SearchIndex", new {page = Model.PageNumber + 1, sortOrder = ViewBag.CurrentSort})
@Html.Raw(" ")
@Html.ActionLink(">>", "SearchIndex", new {page = Model.PageCount, sortOrder = ViewBag.CurrentSort})
}
else
{
@:Next >
@Html.Raw(" ")
@:>>
}
</div>
任何建议都会帮助我做得更好,谢谢。