我问过这个问题,我没有得到答案。所以我对此做了更多的研究,但仍然找不到合适的答案。
我的控制器(缩短):
public ActionResult SearchResult(String sortOrder, String carMake, String carModel)
{
var cars = from d in db.Cars
select d;
if (!String.IsNullOrEmpty(carMake))
{
if (!carMake.Equals("All Makes"))
{
cars = cars.Where(x => x.Make == carMake);
}
}
if (!String.IsNullOrEmpty(carModel))
{
if (!carModel.Equals("All Models"))
{
cars = cars.Where(x => x.Model == carModel);
}
}
switch (sortOrder)
{
case "Model":
cars = cars.OrderBy(s => s.Model);
break;
default:
cars = cars.OrderBy(s => s.Make);
break;
}
return View(cars);
}
我的索引视图(缩短 - 这是用户通过不同输入过滤汽车的地方):
@model IEnumerable<Cars.Models.Car>
@using (Html.BeginForm("SearchResult", "Home", FormMethod.Post))
{
<label>Make</label>
<select id="MakeID" name="carMake">
<option>All Makes</option>
</select>
<label>Model</label>
<select id="ModelID" name="carModel">
<option>All Models</option>
</select>
<button type="submit" name="submit" value="search" id="SubmitID">Search</button>
}
我的SearchResult视图显示搜索结果(缩短):
@model IEnumerable<Cars.Models.Car>
<table>
@foreach (var item in Model)
{
<tr>
<td>
<label>Make:</label>
<p>@Html.DisplayFor(modelItem => item.Make)</p>
</td>
<td>
<label>Model:</label>
<p>@Html.DisplayFor(modelItem => item.Model)</p>
</td>
</tr>
}
</table>
<a href="@Url.Action("SearchResult", "Home", new { sortOrder= "Model"})">Model</a>
我的目标:当用户点击按模型排序时,页面将按模型对结果进行排序。
问题:单击sortby时,action SearchResult
的所有参数都将为null,因为SearchResult View中不存在搜索值。
问题:如何解决这个问题?
谢谢,阿明
更新:任何例子都将深表感谢。我在后端停留了在控制器和视图之间发送和获取数据的整个过程。
答案 0 :(得分:0)
您可以创建一个类,如下所示
public CarFilter CarFilter;
public byte PageSize;
public short PageNumber;
public int TotalRows;
其中CarFilter是另一个类,您可以在其中存储由用户输入的过滤器。 并使用此类作为视图的模型。因此,当您查看加载时,您可以加载汽车过滤器数据。
答案 1 :(得分:0)
您可以通过执行以下任一操作来保留搜索过滤器:
使用会话在搜索结果视图中存储过滤器。这样,当您使用排序在同一视图上发布时,您仍然可以使用搜索过滤器。
(我更喜欢这个)将您的模型包装在具有搜索过滤器属性的类中。这样,您仍然可以检索搜索过滤器。如果您有一个SearchResult的POST,它接受Wrapper Model作为参数。
答案 2 :(得分:0)
按如下方式创建类:
class ManageCarSearch
{
public CarFilter CarFilter;
public byte PageSize;
public short PageNumber;
public int TotalRows;
public String sortOrder;
}
Class CarFilter
{
public String carMake,
public String carModel
}
您的searchResult视图如下所示:
@model IEnumerable<car>
<table>
@foreach (var item in Model)
{
<tr>
<td>
<label>Make:</label>
<p>@Html.DisplayFor(modelItem => item.Make)</p>
</td>
<td>
<label>Model:</label>
<p>@Html.DisplayFor(modelItem => item.Model)</p>
</td>
</tr>
}
</table>
<a href="@Url.Action("SearchResult", "Home", new { sortOrder= "Model"})">Model</a>
和控制器如下:
public ActionResult SearchResult(String sortOrder, String carMake, String carModel)
{
var cars = from d in db.Cars
select d;
ManageCarSearch objsearch = new ManageCarSearch();
////your Logic
return View(objsearch);
}
你搜索的视图如下所示:
@model IEnumerable<ManageCarSearch>
@using (Html.BeginForm("SearchResult", "Home", FormMethod.Post))
{
<label>Make</label>
<select id="MakeID" name="carMake">
<option>All Makes</option>
</select>
<label>Model</label>
<select id="ModelID" name="carModel">
<option>All Models</option>
</select>
<button type="submit" name="submit" value="search" id="SubmitID">Search</button>
}