Wie gehe ich mit vielen möglichen Werten um, um eine Abfrage durchzuführen?
Ich erstelle eine MVC-App, in der der Benutzer die Möglichkeit hat, mithilfe vieler Filter genau das zu erhalten, was er möchte.
Hier ist eine Übersicht dieser Filter, die auf der Controller-Methode basieren:
//
// 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...
}
Ich möchte wissen, wie ich mit all diesen Filtern am besten umgehen kann und wie ich eine Liste von objInfo basierend auf den angegebenen Parametern erhalten kann. Beachten Sie, dass einige Werte null sein können. Alles, was ich bis jetzt getan habe, ist, "alles" zu laden, was ich konnte, und sie dann zu sortieren, indem ich das unerwünschte Element entferne, was in meinem Sinne "nicht schlau" ist, aber ich bin neu in MVC App und ich ' Ich versuche, einen besseren Weg zu finden, um dies zu tun.
BEARBEITEN
Hier ist die Ansicht, die die Daten generiert:
@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>
Jeder Rat wird mir helfen, einen besseren Job zu machen, danke.